Vous n'êtes pas identifié(e).
Imaginons une entité voiture avec un nom et une couleur. Faut-il mieux créer une table couleur avec un id et un nom_couleur avec une clé étrangère couleur_id dans la table voiture OU n'avoir qu'une seule table voiture dans laquelle j'indique directement le nom de la couleur.
Quelles sont les avantages et inconvénients des 2 façons ?
Hors ligne
Bonjour,
une clé étrangère permet de vous assurer que la couleur est bien renseignée dans votre table, il n'est donc pas possible d'utiliser une couleur qui n'existe pas. Personnellement, j'utiliserais une clé étrangère, mais sans clé technique. Le nom de la couleur est à priori une clé naturelle suffisante (sauf si vous voulez prévoir une application multilingue ou ce genre de chose).
Julien.
https://rjuju.github.io/
Hors ligne
OK ça c'est clair maintenant en ce qui concerne la jointure n'est-il pas plus rapide d'utiliser un id (clé technique) plutôt que la clé naturelle (ici la couleur). En terme de performance si j'ai de nombreuses tables complexes avec de nombreuses jointures et de nombreuses données, la clé technique n'était-elle pas préférable ?
Hors ligne
Utiliser la clé naturelle (le nom de la couleur dans le cas présent) permet justement d'éviter une jointure, la validité du contenu du champ étant assurée par la clé étrangère.
Julien.
https://rjuju.github.io/
Hors ligne
pour moi, l'avantage de la clef technique (un id de type int2 ou int4) = stockage plus petit en base qu'un champs texte
Hors ligne
OK donc pour optimiser une BDD il faut éviter les jointures sauf si nécessaire.
Hors ligne
faire une jointure avec une table de quelques dizaines de lignes ne coûte pas grand chose.
Hors ligne