Разработчики баз данных широко используют ключи при разработке реляционных баз данных . Среди наиболее распространенных из этих ключей первичные ключи и внешние ключи. Внешний ключ базы данных — это поле в реляционной таблице, которое соответствует столбцу первичного ключа другой таблицы. Чтобы понять, как работает внешний ключ, давайте подробнее рассмотрим идею реляционной базы данных.
Некоторые основы реляционных баз данных
В реляционной базе данных данные хранятся в таблицах, содержащих строки и столбцы, что упрощает поиск и управление. За концепцией реляционной базы данных стоит серьезная математика (реляционная алгебра, предложенная EF Codd в IBM в 1970 году), но это не тема этой статьи.
Для практических целей (и нематематиков) реляционная база данных хранит связанные данные в строках и столбцах. Далее — и вот где это становится интересным — большинство баз данных спроектированы так, чтобы данные в одной таблице могли получить доступ к данным в другой таблице. Эта способность создавать отношения между таблицами является реальной силой реляционной базы данных.
Использование иностранных ключей
Большинство таблиц, особенно в больших и сложных базах данных, имеют первичные ключи. Таблицы, предназначенные для доступа к другим таблицам, также должны иметь внешний ключ.
Чтобы использовать широко цитируемую базу данных Northwinds, вот выдержка из таблицы Product:
Идантификационный номер продукта | Наименование товара | CategoryID | QuantityPerU | Цена за единицу товара |
---|---|---|---|---|
1 | Chai | 1 | 10 коробок х 20 мешков | 18,00 |
2 | Чанг | 1 | Бутылки на 24 — 12 унций | 19,00 |
3 | Анисовый сироп | 2 | 12 — 550 мл флаконы | 10,00 |
4 | Cajun Приправа шеф-повара Антона | 2 | Банки на 48 — 6 унций | 22,00 |
5 | Шеф-повар Антон Гамбо Микс | 2 | 36 коробок | 21,35 |
6 | Бабушкин Бойзенберри Спред | 2 | Банки на 12 — 8 унций | 25,00 |
7 | Органические сушеные груши дяди Боба | 7 | 12 — 1 фунт фунтов. | 30,00 |
ProductID столбец является первичным ключом этой таблицы. Он присваивает уникальный идентификатор каждому продукту.
Эта таблица также содержит столбец внешнего ключа CategoryID . Каждый продукт в таблице Product ссылается на запись в таблице Categories, которая определяет категорию этого продукта.
Обратите внимание на этот отрывок из таблицы категорий базы данных:
CategoryID | CategoryName | Описание |
---|---|---|
1 | напитки | Безалкогольные напитки, кофе, чай, пиво и эль |
2 | Приправы | Сладкие и соленые соусы, приправы, спреды и приправы |
3 | Кондитерские изделия | Десерты, конфеты и сладкое печенье |
5 | молочные продукты | Брынза |
Столбец CategoryID является первичным ключом этого столбца. (У него нет внешнего ключа, поскольку ему не требуется доступ к другой таблице.) Каждый внешний ключ в таблице Product ссылается на первичный ключ в таблице Categories. Например, продукту Чай назначена категория «Напитки», а сироп анисовый находится в категории «Приправы».
Этот вид связи создает множество способов использовать и повторно использовать данные в реляционной базе данных.