Réponse courte : Oui, il peut s'agir de NULL ou de duplicata.
Je veux expliquer pourquoi une clé étrangère peut avoir besoin d'être nulle ou doit être unique ou non unique. Tout d'abord, rappelez-vous qu'une clé étrangère exige simplement que la valeur de ce champ existe d'abord dans une autre table (la table parente). C'est tout ce qu'une clé étrangère est par définition. Par définition, une valeur nulle n'est pas une valeur. Nul signifie que nous ne savons pas encore quelle est la valeur.
Laissez-moi vous donner un exemple concret. Supposons que vous ayez une base de données qui stocke des propositions de vente. Supposons en outre que chaque proposition n'ait qu'un seul commercial affecté et un seul client. Votre table de propositions aurait donc deux clés étrangères, l'une avec l'ID du client et l'autre avec l'ID du représentant commercial. Cependant, au moment de la création de l'enregistrement, un représentant n'est pas toujours affecté (parce que personne n'est encore libre de travailler dessus), de sorte que l'ID du client est renseigné mais que l'ID du représentant peut être nul. En d'autres termes, vous avez généralement besoin de la possibilité d'avoir un FK nul lorsque vous ne connaissez pas sa valeur au moment de la saisie des données, mais que vous connaissez d'autres valeurs de la table qui doivent être saisies. Pour autoriser les valeurs nulles dans un FK, il suffit généralement d'autoriser les valeurs nulles dans le champ qui possède le FK. La valeur nulle est distincte de l'idée qu'il s'agit d'un FK.
Le fait qu'elle soit unique ou non dépend de la relation entre la table et la table parente, qu'elle soit unique ou non. Maintenant, si vous avez une relation un à un, il est possible d'avoir toutes les données dans une seule table, mais si la table devient trop large ou si les données sont sur un sujet différent (l'employé - l'exemple d'assurance donné par @tbone par exemple), alors vous voulez des tables séparées avec un FK. Vous voudrez alors faire en sorte que ce FK soit également le PK (qui garantit l'unicité) ou lui appliquer une contrainte unique.
La plupart des FK sont destinés à une relation d'un à plusieurs et c'est ce que vous obtenez d'un FK sans ajouter une contrainte supplémentaire sur le champ. Vous avez donc une table de commande et une table de détails de la commande, par exemple. Si le client commande dix articles en une seule fois, il a une commande et dix enregistrements de détails de la commande qui contiennent le même ID de commande que le FK.
1 votes
@Adrian : A ma connaissance, la clé étrangère ne peut pas être nulle mais elle prend la valeur nulle dans sql server et oracle. pouvez-vous expliquer pourquoi ?
0 votes
@Jams - lisez le lien dans ma réponse.
12 votes
Cela ne peut être supprimé car les réponses et la question sont utiles. N'hésitez pas à modifier la question pour l'améliorer.
0 votes
Veuillez séparer la question sur les doublons. Seule la question sur les NULLs est traitée ci-dessous.