2009-03-17 5 views
11

Ok. Donc, je sais ce qu'est une clé primaire dans DB. Si vous avez une table dans une base de données, une clé primaire est une valeur unique propre à chaque ligne de votre table. Par exemple:Qu'est-ce qu'une clé étrangère?

id | name | whatever 
------------------------- 
1  Alice  .... 
2  Bob  .... 
45  Eve  .... 
988 ....  .... 

J'ai donc besoin d'un bon exemple simple pour expliquer ce qu'est exactement une clé étrangère. Parce que je ne comprends pas :)


Edit: OK il est assez facile, je suppose que je trop compliquer le problème.

Donc, une dernière question, la seule restriction sur les clés étrangères est qu'il s'agit d'une valeur de clé primaire valide dans le tableau auquel je fais référence?

+0

"La seule restriction sur les clés étrangères est ..." Ce n'est pas une "restriction", c'est la définition: un FK est une clé primaire valide sur une autre table. –

+0

"... une clé primaire est une valeur unique ..." oui, tant que vous reconnaissez que "valeur" n'est pas synonyme de "colonne". Il est parfaitement valide que la clé primaire soit plusieurs valeurs. –

+0

Grrr. Impossible de modifier les commentaires La dernière phrase devrait se lire comme suit: "Il est parfaitement possible que la clé primaire soit plusieurs COLONNES". –

Répondre

21

Une clé étrangère est un champ qui pointe vers une clé primaire d'une autre table.

Exemple:

Table Name - Users 

UserID UserName UserRoleID 
1   JohnD  1 
2   CourtneyC 1 
3   Benjamin 2 

Table Name - UserRoles 

UserRoleID Desc 
1    Admin 
2    Moderator 

Vous pouvez voir que Users.UserRoleID est une clé étrangère qui pointe vers la UserRoles.UserRoleID clé primaire

L'utilisation des clés étrangères rend la mise en place des relations sur d'autres tables simples , vous permettant de relier les données de plusieurs tables d'une manière agréable:

Exemple:

SELECT 
    a.UserID, 
    a.UserName, 
    b.Desc as [UserRole] 
FROM 
    Users a INNER JOIN 
     UserRoles b ON a.UserRoleID = b.UserRoleID 

sortie serait alors:

UserID UserName User Role 
1   JohnD  Admin 
2   CourneyC Admin 
3   Benjamin Moderator 
0

Dans une base de données relationnelle une relation one-to-many est mis en œuvre en ayant la référence de table enfant l'ID de la table parent. L'ID parent dans la table enfant est appelé une clé étrangère car il fait référence à une clé primaire d'une autre table.

12

Disons que vous avez un autre domaine, qui est la ville natale:

id | name | city 
------------------------- 
1  Alice  San Francisco 
2  Bob  New York 
45  Eve  New York 
988 Bill  San Francisco 

Maintenant, il n'a pas de sens de répéter les mêmes villes dans de nombreuses lignes. Cela pourrait vous conduire à des fautes de frappe, à un usage excessif de l'espace, à des difficultés à faire apparaître des résultats parmi d'autres problèmes. Donc, vous utilisez une clé étrangère:

id | name | fk_city 
------------------------- 
1  Alice  1 
2  Bob  2 
45  Eve  2 
988 Bill  1 

table ville natale:

id | name 
------------------------- 
1 | San Francisco 
2 | New York 

espère que cela rend les choses plus claires pour vous. :-)

Mise à jour: à propos de votre dernière question: Oui. :-)

3

Une clé étrangère est une colonne dans une table qui doit identifier de façon unique quelque chose dans une autre table. Ainsi, les valeurs doivent correspondre aux clés primaires de cette autre table. Par exemple, si vous avez une table d'étudiants qui suivent des cours, chaque enregistrement inclura un identifiant d'étudiant et un identifiant de cours. Ce sont des clés étrangères dans une table d'étudiant (où il y a un enregistrement pour chaque identifiant d'étudiant), et une table de cours (où il y a un enregistrement pour chaque identifiant de cours).L'intégrité référentielle signifie que toutes vos clés étrangères correspondent réellement aux clés primaires de ces tables cibles. Par exemple, tous les identifiants d'étudiant et les identifiants de cours de votre tableau d'inscription correspondent aux identifiants d'étudiants réels et aux identifiants de cours.

0

Une clé étrangère est un champ qui référence une autre table dans la base de données. Par exemple, supposons que vous avez 2 tables, PERSON et ADDRESS. Il y a un champ dans PERSON appelé ID et un champ dans ADDRESS appelé PERSON_ID. Vous devez faire PERSON_ID référence à PERSON.ID en tant que clé étrangère. Cela signifie que vous ne pouvez pas avoir une adresse qui n'est pas connectée à une personne, puisque la valeur dans le champ ADDRESS.PERSON_ID doit exister dans la table PERSON.

1
id | name | whatever | countryid 
------------------------------------- 
1  Alice  ....  13 
2  Bob  ....  42 
45  Eve  ....  1 
988 ....  ....  2 

id | countryid 
---------------- 
1  Japan 
2  Spain 
13  Norway 
42  Italy 

Les points clés étrangers de la table personne (première) à une ligne dans la table des pays (seconde)

0

en utilisant votre exemple de table, supposons que vous avez une autre table:

cartid | id | itemid 
----------------------- 
100  1  abc 
101  1  cde 

Dans cette table, la clé primaire est le cartid, la clé étrangère est l'identifiant, qui serait lié à votre première table. l'utilisateur 1 a deux chariots, chaque chariot ayant chacun un article.

Une clé étrangère est ce que vous utilisez pour lier deux ou plusieurs tables qui ont des informations connexes les unes aux autres.

0

Une clé étrangère est la clé primaire d'une autre table stockée sur votre table. Disons que vous avez une table des clients et un tableau des commandes. Le CustomerId est probablement la clé primaire sur la table client, et l'OrderId est probablement la clé primaire sur la table de commande. Mais sur la table de commande, vous devez connaître le client pour cette commande, non? Par conséquent, vous devez stocker le CustomerId sur la table de commande. Dans ce cas, CustomerId sur la table de commande est une clé étrangère.

Je voudrais souligner qu'il n'y a aucune exigence qu'une clé primaire (et donc une clé étrangère) soit une seule colonne. C'est plus simple, bien sûr. Mais j'ai travaillé sur des systèmes d'entreprise où la clé primaire était longue de 11 colonnes, et je suis sûr qu'il existe des exemples plus longs que cela. Autrement dit, vous devez connaître la valeur de 11 colonnes différentes avant de pouvoir identifier la ligne de manière unique.

Questions connexes