Envoyé par
avairet
Une dernière validation, dans mon exemple pour la table "complements", est-ce judicieux, obligatoire ou superflu de créer une PRIMARY_KEY constituée de mes deux champs id_element1 et id_element2 ?
C’est obligatoire. Par construction, toute table doit avoir une clé, tout comme une entité doit avoir un identifiant (cf. la FAQ Merise mentionnée à juste titre par TheLeadingEdge). Dans le contexte SQL, appelons cela "clé primaire". Sans clé, Complements n’est pas une table, mais ce qu’on appelle un sac (bag). Un sac peut comporter des lignes en double, mais une table ne le peut pas et le rôle de la clé est de nous prémunir en ce sens. En effet, une table est un ensemble, que l’on manipule avec des opérateurs ensemblistes (Union, Projection, Produit, etc.) et le comportement de ces opérateurs devient incertain dès qu’il y a des doublons. En outre, apprendre une chose deux fois ne signifie pas que cette chose soit pour autant deux fois plus vraie...
Quant aux colonnes composant la clé :
Si pour un id_element1 on peut avoir plusieurs id_element2 et réciproquement (cas des nomenclatures), on est dans un scénario "plusieurs-à-plusieurs" (many-to-many) et l’on code :
PRIMARY KEY {id_element1, id_element2}
Si pour un id_element1 on a un seul id_element2 et plusieurs id_element1 pour un id_element2 (cas des hiérarchies), on code :
PRIMARY KEY {id_element1}
Si pour un id_element1 on a un seul id_element2 et réciproquement, on code :
PRIMARY KEY {id_element1}
UNIQUE {id_element2}
Partager