En SQL, el concepto de claves foráneas es importante y se puede encontrar en todas las bases de datos profesionales utilizadas en la industria. La idea central es evitar que su base de datos PostgreSQL almacene datos inconsistentes mediante la aplicación de restricciones que aseguren la corrección de sus tablas (al menos en lo que respecta a las relaciones entre objetos). Por lo tanto, la integridad referencial es uno de los conceptos más importantes que se hayan inventado en ella.

Sin embargo, las claves foráneas introducirán algunos problemas que debe resolver al escribir aplicaciones. Si no hay claves foráneas, puede insertar datos en cualquier tabla en cualquier orden. A PostgreSQL no le importa. Sin embargo, si una clave foránea está en su lugar, el orden comienza a importar (al menos en un escenario típico, pero más sobre eso más adelante).

Claves foráneas y pedido

Para mostrar la importancia del pedido, primero tenemos que crear un modelo de datos:

Queremos almacenar monedas, productos y descripciones de productos. Básicamente es un modelo de datos muy simple. Veamos si insertamos en la tabla de productos:

Lógicamente, la primera INSERCIÓN fallará porque la moneda número 1 aún no existe. Si queremos INSERTAR, tenemos que usar un valor NULO (=moneda desconocida). En palabras ordenadas: Primero tenemos que llenar la tabla de divisas, luego insertar ubicaciones, y así sucesivamente. El orden sí importa en el caso predeterminado.

Determinar el orden de inserción correcto para las claves foráneas

Si tiene que comenzar a usar un modelo de datos existente, puede ser un poco difícil envolver su cabeza alrededor de estas cosas. Rellenar un modelo de datos vacío puede ser un poco complicado. Entonces, ¿por qué no escribir una consulta que nos indique el orden en el que se supone que debemos insertar los datos?

Bueno, aquí está la consulta mágica

La consulta no es trivial de leer, pero he hecho todo lo posible para documentarla un poco. Básicamente, las tablas del sistema PostgreSQL tienen toda la información que necesitamos para determinar el orden correcto. Aquí está la salida:

 table_name | level-----------------+------- t_currency | 1 t_location | 1 t_product | 2 t_product_desc | 3 t_product_stock | 3(5 rows)

Como puede ver, la consulta nos ha dado correctamente las tablas en el orden deseado. En primer lugar, tenemos que insertar en todas las tablas en el nivel uno y así sucesivamente. Si nos atenemos a este orden, siempre se garantizará la integridad referencial (suponiendo que los datos sean correctos).

Haciendo uso de restricciones» inicialmente diferidas »

En algunos casos, el orden de inserción puede ser algo desagradable de tratar. ¿Y si tuviéramos los medios para decirle a PostgreSQL que ignore el orden y verifique la integridad al confirmar en su lugar? Esto es exactamente lo que hace «inicialmente diferido». Así es como funciona:

En este caso, podemos modificar los datos en el orden que queramos. Mientras integridad está garantizada para estar intacto al final de la transacción, PostgreSQL está perfectamente bien. PostgreSQL pospondrá la comprobación de restricciones y quitará algo de carga al desarrollador.

Finalmente

Si desea obtener más información sobre SQL avanzado, puede echar un vistazo a mi blog sobre algunas funciones de ventanas más avanzadas (con vínculos). Así que ponte la corbata y lee para aprender más.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.