Ich verwende PostgreSQL.Einfügen von Daten in Tabellen, die mit Fremdschlüssel verknüpft sind
Customer
==================
Customer_ID | Name
Order
==============================
Order_ID | Customer_ID | Price
einen Auftrag einzufügen, hier ist das, was ich in der Regel tun müssen,
Zum Beispiel: „John“ Ort „1,34“ Preis bestellen.
(1) Get Customer_ID from Customer table, where name is "John"
(2) If there are no Customer_ID returned (There is no John), insert "John"
(3) Get Customer_ID from Customer table, where name is "John"
(4) Insert "Customer_ID" and "1.34" into Order table.
Es gibt 4 SQL-Kommunikation mit der Datenbank für diese einfache Operation beteiligt !!!
Gibt es einen besseren Weg, der mit 1 SQL-Anweisung erreicht werden kann?
Können Sie Ihre Antwort ändern, um "RETURNING" als Depesz vorgeschlagen zu verwenden? Damit wir keine zusätzliche Abfrage durchführen müssen [select customer_id vom Kunden where name = 'John'] –
Das ist keine Optimierung, die ich machen würde. Hier ist der Grund: Erstens, den Code einfach zu halten: Wenn der zweite Insert in der Reihenfolge identisch mit dem ersten ist, können Sie den gleichen Code verwenden, um beide Inserts zu tun. Zweitens: Es wird wahrscheinlich keinen wirklichen Leistungszuwachs geben. Da Sie gerade die Abfrage für den Kunden und dann die Einfügung durchgeführt haben, wird Postgres die Zeile und den entsprechenden Index im Cache haben, so dass die Auswahl des Kunden blitzschnell erfolgt. –