Validation modélisation SQL
Bonjour à tous,
Soit des entités simples "elements" (par exemple des articles).
Lorsqu'on entre dans la base un "element" on souhaite le lier à d'autres "elements" de la même table, que l'on nommera "compléments".
Ainsi, un élément est lié à un ou plusieurs compléments.
Peut-on faire une table "complements" dont les deux champs seraient en fait composés de la PRIMARY KEY de "elements" ?
Schéma simpliste de la chose :
elements
{
id int auto-increment PRIMARY
name varchar(50)
}
complements
{
id_element1 int FK
id_element2 int FK
}
Merci par avance de vos avis et conseils à ce sujet
Avairet
Précision sur les BD d'aujourd'hui
Citation:
Envoyé par avairet
Et donc on n'utilise jamais de sac (bag) dans les DB ? C'est vraiment interdit ?
SQL le permet, mais les résultats sont alors imprévisibles. Maintenant, si vous voulez jouer avec des bâtons de dynamite...
Citation:
Envoyé par avairet
Simple hypothèse : si je mets un Index sur chaque colonne de "complements", voire un Index sur deux colonnes, mais pas de PRIMARY_KEY, suis-je toujours dans le cas d'un sac ?
Il y a encore 20 ans, les SGBD ne fournissaient pas la clause PRIMARY KEY : on utilisait alors des index de type UNIQUE comme palliatifs. Aujourd’hui, on utilise bien entendu la clause.
Citation:
Envoyé par avairet
Si je te suis bien, ma table "complements" n'est pas une "entité", donc l'identifiant n'est pas obligatoire, mais la clé oui ?
Si au niveau MCD Merise, Complements est une association-type, par définition elle n’a pas d’identifiant propre, disons qu’elle hérite des identifiants des entités-types qu’elle met en relation. En conséquence, lors du processus de dérivation du MCD en MLD, cet héritage se traduit par une matérialisation de la clé primaire :
PRIMARY KEY {id_element1, id_element2} si la relation est de type plusieurs-à-plusieurs,
PRIMARY KEY {id_element1} si la relation est de type un-à-plusieurs, etc.
Citation:
Envoyé par fsmrel
En outre, apprendre une chose deux fois ne signifie pas que cette chose soit pour autant deux fois plus vraie...
J’ai repris une blague de Ted Codd, père du Modèle Relationnel de Données (dont les Bases de données relationnelles d'aujourd'hui sont des réalisations partielles, plus ou moins fidèles), qui a dit exactement :
"If something is true, saying it twice doesn’t make it more true."
Autrement dit, si dans la table Complements, on a deux lignes ayant même valeur <elem1, elem2>, on dit en fait deux fois la même chose. On n’en apprendrait pas davantage s’il y avait un milliard de lignes ayant cette même valeur : une fois suffit donc, ni plusse, ni moinsse (no more no less).