Bonsoir,
Je fais remarquer que la solution de nico84 est valide (notez la cardinalité 0..1) :
En effet, le prédicat de la variable relationnelle COMPOSITION est le suivant, conforme non seulement à la règle de gestion proposée aminnio, mais aussi à logique bivalente classique et à la théorie relationnelle :
Le produit ProduitComposéId est composé du produit ProduitComposantId.
Je fais aussi observer que la structure proposée par Sandrine fait intervenir Null et n’est donc pas celle d’une relation où par définition à l’intersection d’un n-uplet et d’un attribut on a exactement une valeur et rien d’autre, or Null n’est pas une valeur mais un marqueur, ce qui fait qu’il est de facto interdit de séjour au sein des relations. Le pseudo-prédicat de cette structure est le suivant :
Le produit ProduitComposéId est peut-être composé du produit ProduitComposantId.
Ce qui du point de vue de la logique bivalente n’est pas possible et nécessite de s’embarquer vers les terrae incognitae de la logique trivalente (voire quadrivalente...), pleine de chausse-trapes (par exemple p SI ET SEULEMENT SI p n’est plus une tautologie, le théorème de Heath n’est plus valide, etc.), et propre à inhiber les systèmes experts des SGBD SQL...
A cette occasion je rappelle que les auteurs de la norme SQL se sont fait piéger (et plus ou moins gentiment moquer...), en écrivant que la valeur de vérité UNKNOWN (Cf. le type BOOLEAN) et Null sont la même chose ! (Ils ont tout simplement oublié que, contrairement à Null, UNKNOWN est une valeur...)
Accessoirement, le jour où la règle de gestion proposée par aminnio évoluera, en ce sens qu’un produit pourra être composé de plusieurs produits, dans le cas de la version de nico84 il suffira d’ajouter l’attribut ProduitComposantId dans la composition de la clé de la table COMPOSITION, d'où une maintenance pour le moins réduite.
Partager