à propos de la cle etrangere

tipex
Invité n'ayant pas de compte PHPfrance

15 avr. 2010, 13:06

Bonjour,

je débute en sql et souhaiterai savoir si la clé étrangère doit être:
UNIQUE ou NON NULLE ou INDEXEE

voila , je m'embrouille un peu les pinceaux...

cordialement,

Mammouth du PHP | 672 Messages

15 avr. 2010, 14:06

Bonjour.

Ca dépend... :oops:
En fait, il faut étudier la cardinalité des relations entre les tables.

En français :

Prenons la BDD d'une bibliothèque.
LIVRES (id_livre, titre, id_auteur, id_emprunteur)
AUTEURS (id_auteur, nom, prenom, divers)
EMPRUNTEURS (id_emprunteur, nom, prenom, etc.)

Cas 1 :
Un livre a forcément été écrit par un auteur, qui existe donc dans la table AUTEURS.
=> la clé étrangère LIVRES.id_auteur est définie à NOT NULL.

Cas 2 :
Un livre n'est pas forcément emprunté. Mais s'il est emprunté, c'est par un emprunteur identifié.
=> Il y a une clé étrangère LIVRES.id_emprunteur, mais elle peut être NULL.

Par définition, une clé etrangère ne doit pas être unique. Sinon, ça voudrait dire qu'on pourrait ne faire qu'une seule table...

L'indexation n'a pas vraiment de rapport. Les contraintes de clé sont des contraintes logiques, l'indexation est un mécanisme technique destiné à améliorer les performances.
A priori, pour ce que j'en sais, sur la plupart des SGBDR, s'il y a une clé etrangère définie, elle est indexée. Mais je ne le garantis pas :?:

tipex
Invité n'ayant pas de compte PHPfrance

15 avr. 2010, 14:23

merci beaucoup pour toute ces précisions (ton exemple est simple et va à l'essentiel) :wink:

je te souhaite une belle après-midi :pouce:

tipex
Invité n'ayant pas de compte PHPfrance

15 avr. 2010, 14:25

comment fait-on pour mettre le topic en mode "résolu"?

tipex
Invité n'ayant pas de compte PHPfrance

15 avr. 2010, 14:29

* un bel, sorry =P~

Mammouth du PHP | 672 Messages

15 avr. 2010, 17:16

comment fait-on pour mettre le topic en mode "résolu"?
En haut de ton premier post, il y a un bouton avec un V vert...
* un bel, sorry =P~
... Et tu peux éditer tes messages en cliquant le bouton "Editer" :mrgreen:

ViPHP
ViPHP | 2287 Messages

23 avr. 2010, 23:16

comment fait-on pour mettre le topic en mode "résolu"?
En haut de ton premier post, il y a un bouton avec un V vert...
* un bel, sorry =P~
... Et tu peux éditer tes messages en cliquant le bouton "Editer" :mrgreen:
... et pour avoir accès à tout ça il faut s'inscrire ;) Sinon on demande à un modérateur de le faire pour toi.
if(!@work()){ Nespresso(); } else { what(); }
______________________________