2009-03-17 1 views
11

Хорошо. Поэтому я знаю, что такое первичный ключ в БД. Если у вас есть таблица в базе данных, первичный ключ - это единственное значение, уникальное для каждой строки в вашей таблице. Например:Что такое внешний ключ?

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

Так что мне нужен хороший, простой пример, чтобы объяснить, что такое внешний ключ. Потому что я просто не понимаю :)


Edit: OK это довольно легко, я предполагаю, что я был чрезмерно усложнять проблему.

Итак, последний вопрос, единственное ограничение по внешним ключам заключается в том, что он является допустимым значением первичного ключа в таблице, на которую я ссылаюсь?

+0

«Единственное ограничение на внешние ключи ...» Это не «ограничение», это определение: FK - действительный первичный ключ в другой таблице. –

+0

«... первичный ключ - это одно значение ...» да, если вы признаете, что «значение» не является синонимом «столбца». Для первичного ключа это абсолютно справедливо для нескольких значений. –

+0

Grrr. Невозможно отредактировать комментарии. Последнее предложение должно гласить: «Совершенно верно, что первичный ключ является множественным COLUMNS». –

ответ

21

Внешний ключ - это поле, указывающее на первичный ключ другой таблицы.

Пример:

Table Name - Users 

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

Table Name - UserRoles 

UserRoleID Desc 
1    Admin 
2    Moderator 

Вы можете видеть, что Users.UserRoleID является внешним ключом, который указывает на первичный ключ UserRoles.UserRoleID

Использование внешних ключей делает настройку отношения других таблиц простых , что позволяет связать воедино данные из нескольких таблиц в хорошем способе:

Пример:

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

Выход бы тогда:

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

В реляционной базе данных отношения один-ко-многим реализуется при наличии опорной дочерней таблицы идентификатор родительской таблицы. Идентификатор родителя в таблице Child называется внешним ключом, поскольку он ссылается на первичный ключ другой таблицы.

12

Допустим, у вас есть еще одно поля, которое является родным городом:

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

Теперь это не имеет смысла повторять одни и те же города, во многих строках. Это может привести к опечаткам, чрезмерному использованию пространства, затруднениям принести результаты среди других проблем. Таким образом, вы используете внешний ключ:

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

родного город таблица:

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

Надеется, что это делает вещи яснее для вас. :-)

Обновление: о вашем последнем вопросе: Да. :-)

3

Внешний ключ - это столбец в одной таблице, который должен однозначно идентифицировать что-то в другой таблице. Таким образом, значения должны соответствовать первичным ключам в этой другой таблице.

Например, если у вас есть таблица студентов, проходящих курсы, каждая запись будет включать идентификатор студента и идентификатор курса. Это внешние ключи в таблицу учеников (где есть одна запись для каждого идентификатора студента) и таблица курсов (где есть одна запись для каждого идентификатора курса).

Ссылочная целостность означает, что все ваши внешние ключи фактически соответствуют первичным ключам в этих целевых таблицах. Например, все идентификаторы учащихся и идентификаторы курса в вашей регистрационной таблице соответствуют реальным идентификаторам учащихся и идентификаторам курса.

0

Внешний ключ - это поле, которое ссылается на другую таблицу в базе данных. Например, предположим, что у вас было 2 таблицы, PERSON и ADDRESS. Существует поле в PERSON под названием ID и поле в ADDRESS под названием PERSON_ID. Вы бы сделали PERSON_ID ссылкой на PERSON.ID в качестве внешнего ключа. Это означает, что вы не можете иметь адрес, который не связан с человеком, поскольку значение в поле ADDRESS.PERSON_ID должно существовать в таблице 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 

Внешний ключ, точек от лица таблицы (первый) в ряд в стране таблице (второй)

0

используя ваш пример таблицы, предположим, что у вас есть еще один стол:

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

в этой таблице основным ключом является cartid, внешний ключ - это идентификатор, который будет связан с вашей первой таблицей. пользователь 1 имеет две тележки, каждая из которых имеет по одному элементу.

внешний ключ - это то, что вы используете для связи двух или более таблиц, которые имеют связанную информацию друг с другом.

0

Внешним ключом является первичный ключ из другой таблицы, хранящейся на вашем столе. Скажем, у вас есть таблица клиентов и таблица заказов. CustomerId скорее всего является основным ключом в таблице клиентов, а OrderId, скорее всего, является первичным ключом в таблице заказов. Но в таблице заказов вам нужно знать клиента для этого заказа, нет? Поэтому вам необходимо сохранить CustomerId в таблице заказов. В этом случае CustomerId в таблице заказов является внешним ключом.

Я хотел бы указать, что первичный ключ (и, следовательно, внешний ключ) не является единственным столбцом. Это проще, конечно. Но я работал над корпоративными системами, где первичный ключ составлял 11 столбцов, и я уверен, что примеров больше, чем это. То есть вам нужно знать значение для 11 разных столбцов, прежде чем вы сможете однозначно идентифицировать строку.

 Смежные вопросы

  • Нет связанных вопросов^_^