serial references primary foreign delete constraint autoincrement agregar postgresql foreign-keys foreign-collection

references - PostgreSQL matriz de elementos que cada uno es una clave externa



postgresql foreign key to serial (2)

Estoy intentando crear una base de datos para mi aplicación y una cosa que me gustaría encontrar es la mejor forma de hacerlo creando una relación de uno a varios entre mis Users y las tablas de Items .

Sé que puedo hacer una tercera tabla, ReviewedItems , y hacer que las columnas sean un ID de User y un ID de Item , pero me gustaría saber si es posible hacer una columna en Users , digamos reviewedItems , que es una matriz de enteros Contiene claves externas para los Items que el User ha revisado.

Si PostgreSQL puede hacer esto, ¡por favor hágamelo saber! Si no, solo iré por la tercera ruta de mi mesa.


No, esto no es posible.

PostgreSQL es un DBMS relacional , que opera de manera más eficiente en modelos de datos correctamente normalizados. Las matrices son, por definición, son conjuntos ordenados, no estructuras de datos relacionales y, por lo tanto, el estándar SQL no admite la definición de claves externas en los elementos de la matriz, y tampoco lo hace PostgreSQL.

Sin embargo, puede crear una base de datos perfectamente fina con elementos de matriz vinculados a claves primarias en otras tablas. Sin embargo, esos elementos de la matriz no se pueden declarar como claves externas y, por lo tanto, el DBMS no mantendrá la integridad referencial.


Puede que pronto sea posible hacer esto: https://commitfest.postgresql.org/17/1252/ - ¡Mark Rofail ha estado haciendo un excelente trabajo en este parche!

El parche permitirá (una vez completado) permitir

CREATE TABLE PKTABLEFORARRAY ( ptest1 float8 PRIMARY KEY, ptest2 text ); CREATE TABLE FKTABLEFORARRAY ( ftest1 int[], FOREIGN KEY (EACH ELEMENT OF ftest1) REFERENCES PKTABLEFORARRAY, ftest2 int );

Sin embargo, el autor actualmente necesita ayuda para cambiar el parche (más allá de mi propia capacidad), por lo que cualquier persona que lea esto y conozca los aspectos internos de Postgres, por favor, ayúdeme si puede.