Maison >base de données >tutoriel mysql >Comment implémenter des relations plusieurs-à-plusieurs dans PostgreSQL ?
PostgreSQL, comme d'autres systèmes de bases de données relationnelles, permet des relations complexes entre les tables de bases de données. Un scénario courant est la relation plusieurs-à-plusieurs, dans laquelle plusieurs enregistrements d'une table peuvent être associés à plusieurs enregistrements d'une autre.
La mise en œuvre d'une relation plusieurs-à-plusieurs dans PostgreSQL nécessite généralement une troisième table intermédiaire. Cette « table de jonction » ou « table de pont » relie les deux tables originales. Il contient des clés étrangères référençant les clés primaires des deux tables, formant une clé primaire composite (ou une contrainte unique).
Illustrons avec un exemple :
<code class="language-sql">CREATE TABLE product ( product_id SERIAL PRIMARY KEY, product_name TEXT NOT NULL, price NUMERIC NOT NULL DEFAULT 0 ); CREATE TABLE invoice ( invoice_id SERIAL PRIMARY KEY, invoice_number TEXT NOT NULL, invoice_date DATE NOT NULL DEFAULT CURRENT_DATE ); CREATE TABLE invoice_product ( invoice_id INTEGER REFERENCES invoice (invoice_id) ON UPDATE CASCADE ON DELETE CASCADE, product_id INTEGER REFERENCES product (product_id) ON UPDATE CASCADE, quantity NUMERIC NOT NULL DEFAULT 1, CONSTRAINT invoice_product_pkey PRIMARY KEY (invoice_id, product_id) );</code>
La table invoice_product
fait office de table de jonction, reliant invoice
et product
. invoice_id
et product_id
sont des clés étrangères, garantissant l'intégrité référentielle. Les clauses ON UPDATE CASCADE
et ON DELETE CASCADE
maintiennent la cohérence des données lorsque des enregistrements sont modifiés ou supprimés dans les tables principales.
Lors de l'insertion ou de la suppression de lignes des tables invoice
ou product
, les actions en cascade sur les clés étrangères mettent automatiquement à jour ou suppriment les entrées associées dans la table invoice_product
, simplifiant ainsi la gestion des données.
Pour interroger des données dans cette relation plusieurs-à-plusieurs, utilisez les opérations JOIN
. Par exemple, pour retrouver tous les produits associés à une facture spécifique :
<code class="language-sql">SELECT p.product_name, ip.quantity FROM invoice i JOIN invoice_product ip ON i.invoice_id = ip.invoice_id JOIN product p ON ip.product_id = p.product_id WHERE i.invoice_id = 123;</code>
En résumé, gérer efficacement les relations plusieurs-à-plusieurs dans PostgreSQL implique de créer une table de jonction avec des contraintes de clé étrangère appropriées. Cette approche facilite une modélisation claire des données et une récupération efficace des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!