Связи с базой данных являются основой всех реляционных баз данных.
Связь устанавливается между двумя таблицами базы данных, когда одна таблица имеет внешний ключ, который ссылается на первичный ключ другой таблицы. Это основная концепция термина реляционная база данных.
Как работает внешний ключ для установления отношений
Давайте рассмотрим основы первичного и внешнего ключей. Первичный ключ однозначно идентифицирует каждую запись в таблице. Это тип ключа-кандидата, который обычно является первым столбцом в таблице и может автоматически генерироваться базой данных, чтобы гарантировать его уникальность.
Внешний ключ – это другой ключ-кандидат (не первичный ключ), используемый для связи записи с данными в другой таблице.
Например, рассмотрим эти две таблицы, которые определяют, какой учитель преподает какой курс.
Здесь первичный ключ таблицы Courses – Course_ID. Его внешний ключ – Teacher_ID:
Course_001 | Биология | Teacher_001 |
Course_002 | Math | Teacher_001 |
Course_003 | английский | Teacher_003 |
Вы можете видеть, что внешний ключ в Курсах соответствует первичному ключу в Учителях:
Teacher_001 | Кармен |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Можно сказать, что внешний ключ Teacher_ID помог установить связь между таблицами Courses и Teachers.
Типы отношений базы данных
Используя внешние ключи или другие ключи-кандидаты, вы можете реализовать три типа отношений между таблицами:
Один-к-одному . Этот тип отношений допускает только одну запись на каждой стороне отношения. Первичный ключ относится только к одной записи – или ни одной – в другой таблице. Например, в браке у каждого из супругов есть только один другой супруг. Этот тип отношений может быть реализован в одной таблице и поэтому не использует внешний ключ.
Один ко многим . Отношение один ко многим позволяет связать одну запись в одной таблице с несколькими записями в другой таблице. Рассмотрим бизнес с базой данных, в которой есть таблицы клиентов и заказов.
Один клиент может приобрести несколько заказов, но один заказ не может быть связан с несколькими клиентами. Поэтому таблица «Заказы» будет содержать внешний ключ, который соответствует первичному ключу таблицы «Клиенты», а таблица «Клиенты» не будет иметь внешнего ключа, указывающего на таблицу «Заказы».
Многие ко многим . Это сложное отношение, при котором множество записей в таблице могут ссылаться на множество записей в другой таблице. Например, нашему бизнесу, вероятно, нужны не только таблицы «Заказчики» и «Заказы», но, вероятно, также нужна таблица «Продукты».
Опять же, связь между таблицей «Заказчики» и «Заказы» является однозначной, но рассмотрим взаимосвязь между таблицей «Заказы и продукты». Заказ может содержать несколько продуктов, и продукт может быть связан с несколькими заказами: несколько клиентов могут отправить заказ, содержащий несколько одинаковых продуктов. Для такого рода отношений требуется как минимум три таблицы.
Какие связи с базой данных важны?
Установление согласованных связей между таблицами базы данных помогает обеспечить целостность данных, способствуя нормализации базы данных. Например, что если мы не связали какие-либо таблицы через внешний ключ, а вместо этого просто объединили данные в таблицах Courses и Teachers, например, так:
Teacher_001 | Кармен | Биология, математика |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | английский |
Эта конструкция негибкая и нарушает первый принцип нормализации базы данных, First Normal Form (1NF), который гласит, что каждая ячейка таблицы должна содержать один отдельный фрагмент данных.
Или, возможно, мы решили просто добавить вторую запись для Кармен, чтобы применить 1NF:
Teacher_001 | Кармен | Биология |
Teacher_001 | Кармен | Math |
Teacher_002 | Veronica | Math |
Teacher_003 | Jorge | английский |
Это все еще слабый дизайн, вносящий ненужное дублирование и то, что называется аномалиями вставки данных , что означает, что это может привести к несовместимым данным.Например, если учитель имеет несколько записей, что если некоторые данные необходимо отредактировать, но человек, выполняющий редактирование данных, не осознает, что существует несколько записей? Таблица затем будет содержать разные данные для одного и того же лица, без какого-либо четкого способа идентифицировать его или избежать его.
Разделение этой таблицы на две таблицы, «Учителя» и «Курсы» (как показано выше), создает правильную взаимосвязь между данными и, следовательно, помогает обеспечить согласованность и точность данных.