Estoy usando PostgreSQL.Insertar datos en tablas vinculadas por clave externa
Customer
==================
Customer_ID | Name
Order
==============================
Order_ID | Customer_ID | Price
Para insertar un pedido, esto es lo que tengo que hacer por lo general,
Por ejemplo, para "John" lugar "1,34" precio.
(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.
¡Hay 4 comunicaciones SQL con base de datos involucradas para esta operación simple!
¿Hay alguna manera mejor, que se puede lograr usando 1 instrucción SQL?
¿Puedes modificar tu respuesta para usar "DEVOLUCIÓN" como se sugirió depesz? De modo que no necesitamos realizar una consulta adicional [select customer_id del cliente donde name = 'John'] –
No es una optimización que haría. He aquí por qué: Primero, mantener el código simple: si el segundo inserto en el orden es idéntico al primero, puede usar el mismo código para hacer ambos insertos. Segundo: no es probable que haya una ganancia de rendimiento real. Dado que acaba de hacer la consulta sobre el cliente y luego la inserción, Postgres tendrá la fila y el índice apropiado en la memoria caché, por lo que el cliente seleccionado será muy rápido. –