2 votes

Définition de la fonction Many-to-Many conditionnelle dans Postgresql

J'ai ces trois tableaux,

  • menu
  • article
  • catégorie

Et les relations entre toutes ces tables sont,

  1. Un menu peut comporter plusieurs éléments et catégories. Le menu a donc une relation de type "one-to-many" avec l'élément et la catégorie.
  2. L'élément et la catégorie ont une relation many-to-many.

erd

  1. De plus, la contrainte à laquelle je pense est que l'élément et la catégorie ne peuvent être connectés que s'ils sont tous deux sous le même menu.

Actuellement, je pense appliquer les deux premières contraintes (un à plusieurs et plusieurs à plusieurs) dans la base de données et gérer la troisième contrainte du côté de l'application.

Existe-t-il une meilleure façon de définir ce type de contrainte conditionnelle dans Postgres ou tout autre base de données ? Si oui, existe-t-il un terme industriel pour le désigner ?

0voto

Damir Sudarevic Points 14125

Je ne sais pas si cela a un sens du point de vue de la gestion d'un restaurant, mais cela correspond aux contraintes décrites dans la question.

-- Menu MEN exists.
--
menu {MEN}
  PK {MEN}

-- Item ITM is on menu MEN.
--
item {ITM, MEN}
  PK {ITM}
  SK {ITM, MEN}

-- Category CAT is listed on menu MEN.
--
category {CAT, MEN}
      PK {CAT}
      SK {CAT, MEN}

-- Item ITM, from menu MEN, is in category CAT
-- from the same menu.
--
item_category {ITM, CAT, MEN}
           PK {ITM, CAT}

FK1 {ITM, MEN} REFERENCES item {ITM, MEN}
FK2 {CAT, MEN} REFERENCES category {CAT, MEN} 

Note :

All attributes (columns) NOT NULL

PK = Primary Key
AK = Alternate Key   (Unique)
SK = Proper Superkey (Unique)
FK = Foreign Key

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X