Что такое внешний ключ?

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

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

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


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

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

Ответы

Ответ 1

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

Пример:

Table Name - Users

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

Table Name - UserRoles

UserRoleID    Desc
1             Admin
2             Moderator

Вы можете видеть, что User.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

Ответ 2

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

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

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

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

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

Ответ 4

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

Внешний ключ указывает из таблицы лиц (сначала) в строку в таблице страны (второй)

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

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

Ответ 8

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

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