Разработчики баз данных широко используют ключи при разработке реляционных баз данных. Среди наиболее распространенных из этих ключей - первичные ключи и внешние ключи. Внешний ключ базы данных - это поле в реляционной таблице, которое соответствует столбцу первичного ключа другой таблицы. Чтобы понять, как работает внешний ключ, давайте подробнее рассмотрим идею реляционной базы данных.
Некоторые основы реляционных баз данных
В реляционной базе данных данные хранятся в таблицах, содержащих строки и столбцы, что позволяет легко искать и манипулировать. Существует некоторая серьезная математика, лежащая в основе концепции реляционной базы данных (реляционная алгебра, предложенная E.F.
Codd в IBM в 1970 году), но это не тема этой статьи.
Для практических целей (и не математиков) реляционная база данных хранит связанные данные в строках и столбцах. Далее - и здесь, где это становится интересным, большинство баз данных разработаны таким образом, что данные в одной таблице могут обращаться к данным в другой таблице. Эта способность создавать отношения между таблицами - это реальная сила реляционной базы данных.
Использование внешних ключей
Большинство таблиц, особенно крупных, сложных баз данных, имеют первичные ключи. Таблицы, предназначенные для доступа к другим таблицам, также должны иметь внешний ключ.
Чтобы использовать общепринятую базу данных Northwinds, вот выдержка из таблицы Product:
| Код товара | Наименование товара | CategoryID | QuantityPerU | Цена за единицу |
|---|---|---|---|---|
| 1 | Chai | 1 | 10 коробок x 20 мешков | 18.00 |
| 2 | Чанг | 1 | 24 - 12 унций бутылок | 19.00 |
| 3 | Анисовый сироп | 2 | 12 - 550 мл бутылок | 10.00 |
| 4 | Шеф-повар Антона Cajun Seasoning | 2 | 48 - 6 унций банок | 22.00 |
| 5 | Шеф-повар Антона Гумбо Микс | 2 | 36 коробок | 21.35 |
| 6 | Распространение Boysenberry бабушки | 2 | 12 - 8 унций банок | 25.00 |
| 7 | Органические сушеные груши дяди Боба | 7 | 12 - 1 фунт pkgs. | 30.00 |
Код товара column - это первичный ключ этой таблицы. Он присваивает каждому идентификатору уникальный идентификатор.
В этой таблице также содержится столбец внешнего ключа, CategoryID, Каждый продукт в таблице Product ссылается на запись в таблице категорий, которая определяет категорию продукта.
Обратите внимание на эту выдержку из таблицы категорий базы данных:
| CategoryID | CategoryName | Описание |
|---|---|---|
| 1 | напитки | Безалкогольные напитки, кофе, чай, пиво и эль |
| 2 | Приправы | Сладкие и вкусные соусы, смазки, спреды и приправы |
| 3 | Кондитерские изделия | Десерты, конфеты и сладости |
| 5 | молочные продукты | Брынза |
Колонка CategoryID это первичный ключ этого столбца. (У него нет внешнего ключа, потому что ему не нужно обращаться к другой таблице.) Каждый внешний ключ в таблице Product ссылается на первичный ключ в таблице «Категории». Например, продукту Chai присваивается категория «Напитки», в то время как анисовый сироп относится к категории «Приправы».
Такая привязка создает множество способов использования и повторного использования данных в реляционной базе данных.




