Une clé étrangère peut-elle être NULL et/ou en double ?

Une clé étrangère peut-elle être NULL et/ou en double ?

Réponse courte : Oui, elle peut être NULL ou en double.

Je souhaite expliquer pourquoi une clé étrangère pourrait devoir être nulle ou pourrait devoir être unique ou non unique. Rappelez-vous d’abord qu’une clé étrangère exige simplement que la valeur dans ce champ doit exister au préalable dans une autre table (la table parente). C’est tout ce qu’est une FK par définition. Null par définition n’est pas une valeur. Null signifie que nous ne connaissons pas encore la valeur.

Permettez-moi de vous donner un exemple concret. Supposons que vous ayez une base de données qui stocke des propositions commerciales. Supposons en outre que chaque proposition n’ait qu’un seul commercial assigné et un seul client. Votre table de propositions aurait donc deux clés étrangères, une avec l’ID du client et une avec l’ID du commercial. Cependant, au moment de la création de l’enregistrement, un commercial n’est pas toujours assigné (parce que personne n’est disponible pour y travailler encore), donc l’ID du client est renseigné mais l’ID du commercial peut être null. En d’autres termes, vous avez généralement besoin de la possibilité d’avoir une FK nulle lorsque vous ne connaissez pas sa valeur au moment de la saisie des données, mais vous connaissez d’autres valeurs dans la table qui doivent être saisies. Pour autoriser les valeurs nulles dans une FK, il suffit généralement d’autoriser les valeurs nulles sur le champ qui contient la FK. La valeur nulle est distincte du concept même de FK.

Que la FK soit unique ou non est lié au fait que la table a une relation un-à-un ou un-à-plusieurs avec la table parente. Si vous avez une relation un-à-un, il est possible que vous puissiez avoir toutes les données dans une seule table, mais si la table devient trop large ou si les données portent sur un sujet différent (l’exemple employé-assurance que @tbone a donné par exemple), alors vous voulez des tables séparées avec une FK. Vous voudriez alors faire de cette FK soit également la PK (ce qui garantit l’unicité) soit lui appliquer une contrainte d’unicité.

La plupart des FK sont pour une relation un-à-plusieurs et c’est ce que vous obtenez avec une FK sans ajouter de contrainte supplémentaire sur le champ. Vous avez donc une table de commandes et la table des détails de commande par exemple. Si le client commande dix articles

(Réponse tronquée)