Où dois-je ranger une clé étrangère?
Si j'ai une relation entre deux tables (les deux tables ont leur propre clés primaires) ce qui devrait guider ma décision quant à la table doit stocker la clé étrangère? Je comprends que la nature de la relation probablement des questions (un-à-un, un-à-plusieurs, plusieurs-à-plusieurs, unidirectionnel, bidirectionnel), et probablement des modèles d'accès de la matière aussi. Ce qui est une façon systématique de prendre cette décision si?
- "Ce qui est une façon systématique de prendre cette décision?" "comprendre que la nature de la relation probablement des questions". Correct. La nature de la relation d'affaires. Je ne comprends pas la question. Voulez-vous savoir comment définir ce qui est dépendante de l'autre?
- Le documentation de MySQL de clés étrangères fournit un exemple simple de la relation entre les 2 tables parent:
customer
,product
et une table d'enfant:product_order
. Dans cet exempleproduct_order
est l'enfant du tableau qui doit contenir les clés étrangères.
Vous devez vous connecter pour publier un commentaire.
La table qui est l'enfant dans la relation?
Répondre à cette question, et vous savez ce qui table besoins de la colonne de clé étrangère, la référence à la société mère [généralement] clé primaire. C'est pour un un-à-plusieurs de la relation...
Un plusieurs-à-plusieurs nécessiterait l'ajout d'un troisième tableau, à l'aide des touches à la fois des deux tableaux que c'est la clé primaire.
Il semble y avoir deux choix: Le côté "Un" que FK est pour le côté "Plusieurs", ou du Côté "Plusieurs" a FK pour le côté "Un".
Nous allons en fait l'aspect d'un choix.
Toutes les lignes du côté "Plusieurs" peut facilement faire référence à une rangée sur le côté "Un".
L'une rangée sur le côté "Un" ne peut pas toujours la référence de TOUTES les lignes sur le côté "Plusieurs".
Une seule technique fonctionne: côté "Plusieurs" a FK à côté "Un".
Il y a seulement une mise en œuvre effective de choix. Il n'y a pas de "décision".
Une clé étrangère est simplement un champ dans une table qui se réfère à un champ clé d'une autre table. Il n'est pas absolument essentiel de définir le champ de clé étrangère en tant que telle. C'est, vous n'avez pas besoin d'ajouter explicitement la CLÉ ÉTRANGÈRE ... les RÉFÉRENCES de contrainte à la table pour qu'elle soit une clé étrangère. Lorsque vous joignez les deux tables ensemble, la clé primaire de la table parent sera égal à la clé étrangère de la table enfant. Celle qui est la pas la clé primaire est la clé étrangère.
Dans un-à-plusieurs relations, le FK va sur le côté "plusieurs". Il ne peut pas aller sur le côté "un" parce que c'est là que le psy va et la définition d'une clé primaire comprend interdisant les doublons.
Si vous avez un plusieurs-à-plusieurs, vous aurez besoin de re-travailler les tables si vous vous retrouvez avec deux un-à-plusieurs relations et une résolution intermédiaire de la table.
Comme un
primary key
, unforeign key
est également un type deconstraint
placé sur une ou plusieurs colonnes dans une table.La
foreign key
établit un lien entre la clé des colonnes et des colonnes associées dans une autre table. (Vous pouvez également lier les colonnes de clé étrangère pour les colonnes à l'intérieur de la même table.)La table qui contient la clé étrangère est considéré comme l'enfant de la table, et la table que la clé étrangère référence est la table parent.
Points Clés
foreign key
doit faire référence à une contrainte primary key ou unique, même si ce renvoi peut être sur la même table ou sur une autre tableforeign key
doit également avoir le même nombre de colonnes que le nombre de colonnes dans référencé dans la contrainte, et les types de données doivent correspondre entre les colonnes correspondantes.Primary key
,Foreign key
colonnes peuvent contenir des NULL valeurs.