Что такое внешний ключ?
Ok. Так я знаю, что такое первичный ключ в БД. Если у вас есть таблица в базе данных, первичный ключ-это единственное значение, уникальное для каждой строки таблицы. Например:
id | name | whatever
-------------------------
1 Alice ....
2 Bob ....
45 Eve ....
988 .... ....
поэтому мне нужен хороший, простой пример, чтобы объяснить, что такое внешний ключ. Потому что я просто не понимаю :)
Edit: хорошо, это довольно легко, я думаю, что я слишком усложнял проблему.
один последний вопрос, единственное ограничение на иностранное ключи - это допустимое значение первичного ключа в таблице, на которую я ссылаюсь?
8 ответов
внешний ключ-это поле, которое указывает на первичный ключ другой таблицы.
пример:
Table Name - Users
UserID UserName UserRoleID
1 JohnD 1
2 CourtneyC 1
3 Benjamin 2
Table Name - UserRoles
UserRoleID Desc
1 Admin
2 Moderator
вы можете видеть, что пользователи.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
предположим, у вас есть другое поле, которое является родным городом:
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
надеюсь, что это делает вещи яснее для вас. :-)
обновление: о вашем последнем вопросе: да. :-)
внешний ключ-это столбец в одной таблице, который должен однозначно идентифицировать что-то в другой таблице. Таким образом, значения должны соответствовать первичным ключам в другой таблице.
например, если у вас есть таблица студентов, проходящих курсы, каждая запись будет включать идентификатор студента и идентификатор курса. Это внешние ключи в таблицу студентов (где есть одна запись для каждого идентификатора студента) и таблицу курсов (где есть одна запись для каждого курса идентификатор.)
ссылочная целостность означает, что все ваши внешние ключи фактически соответствуют первичные ключи в этих таблицах. Например, все идентификаторы студентов и курсов в таблице регистрации соответствуют реальным идентификаторам студентов и курсов.
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
внешние ключевые точки из таблицы person (первая) в строку таблицы country (вторая)
в реляционной базе данных связь "один ко многим" реализуется путем ссылки дочерней таблицы на идентификатор родительской таблицы. Родительский ID в дочерней таблице называется внешним ключом, поскольку он ссылается на первичный ключ другой таблицы.
внешний ключ-это поле, которое ссылается на другую таблицу в базе данных. Например, предположим, что у вас 2 таблицы, PERSON
и ADDRESS
. Есть поле в PERSON
под названием ID
и в поле ADDRESS
под названием PERSON_ID
. Вы бы сделали PERSON_ID
смотрите PERSON.ID
как внешний ключ. Это означает, что вы не можете иметь адрес, который не связан с человеком, так как значение в ADDRESS.PERSON_ID
поле должно существовать в таблице PERSON
.
используя пример таблицы, предположим, что у вас есть другая таблица:
cartid | id | itemid
-----------------------
100 1 abc
101 1 cde
в этой таблице первичным ключом является cartid, внешним ключом является id, который будет связан с вашей первой таблицей. потребитель 1 имеет 2 тележки, каждую тележку имея один деталь каждое.
внешний ключ-это то, что вы используете, чтобы связать две или более таблиц, связанных с информацией.
внешний ключ-это первичный ключ из другой таблицы, хранящиеся на вашем столе. Скажем, у вас есть таблица клиентов и таблица заказов. Скорее всего, CustomerId является первичным ключом в таблице customer, а OrderId - первичным ключом в таблице order. Но на столе заказа вам нужно знать клиента для этого заказа, нет? Поэтому вам нужно сохранить CustomerId в таблице order. В этом случае CustomerId в таблице order является внешним ключом.
Я бы обратите внимание, что нет требования, чтобы первичный ключ (и, следовательно, внешний ключ) был одним столбцом. Это проще, конечно. Но я работал над корпоративными системами, где первичный ключ был длиной 11 столбцов, и я уверен, что есть примеры длиннее. То есть вам нужно было знать значение для 11 различных столбцов, прежде чем вы сможете однозначно идентифицировать строку.