PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 03/06/2014 15:26:50

zeb
Membre

Id avec clé étrangère ou nom directement dans une seule table

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

#2 03/06/2014 17:37:10

rjuju
Administrateur

Re : Id avec clé étrangère ou nom directement dans une seule table

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).

Hors ligne

#3 04/06/2014 10:57:33

zeb
Membre

Re : Id avec clé étrangère ou nom directement dans une seule table

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

#4 04/06/2014 11:21:29

rjuju
Administrateur

Re : Id avec clé étrangère ou nom directement dans une seule table

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.

Hors ligne

#5 04/06/2014 11:49:11

arthurr
Membre

Re : Id avec clé étrangère ou nom directement dans une seule table

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

#6 04/06/2014 11:58:50

zeb
Membre

Re : Id avec clé étrangère ou nom directement dans une seule table

OK donc pour optimiser une BDD il faut éviter les jointures sauf si nécessaire.

Hors ligne

#7 04/06/2014 13:48:41

arthurr
Membre

Re : Id avec clé étrangère ou nom directement dans une seule table

faire une jointure avec une table de quelques dizaines de lignes ne coûte pas grand chose.

Hors ligne

Pied de page des forums