Что такое связь с базой данных?

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

Как работает внешний ключ для установления отношений

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

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

Например, рассмотрим эти две таблицы, которые определяют, какой учитель преподает какой курс. 

Здесь первичный ключ таблицы Courses — Course_ID. Его внешний ключ — Teacher_ID:

Course_ID
Название курса
Teacher_ID
Course_001БиологияTeacher_001
Course_002математическийTeacher_001
Course_003английскийTeacher_003

Курсы

Вы можете видеть, что внешний ключ в Курсах соответствует первичному ключу в Учителях:

Teacher_ID
Имя учителя
Teacher_001Кармен
Teacher_002вероника
Teacher_003Jorge

Учителя

Можно сказать, что внешний ключ Teacher_ID помог установить связь между курсами и таблицами преподавателей.

Типы отношений базы данных

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

Один к одному: Этот тип отношений позволяет только одну запись на каждой стороне отношения. Первичный ключ относится только к одной записи — или ни одной — в другой таблице. Например, в браке у каждого из супругов есть только один другой супруг. Этот тип отношений может быть реализован в одной таблице и поэтому не использует внешний ключ.

Один ко многимОтношение «один ко многим» позволяет связать одну запись в одной таблице с несколькими записями в другой таблице. Рассмотрим бизнес с базой данных, в которой есть таблицы клиентов и заказов.

Один клиент может приобрести несколько заказов, но один заказ не может быть связан с несколькими клиентами. Поэтому таблица «Заказы» будет содержать внешний ключ, который соответствует первичному ключу таблицы «Клиенты», а таблица «Клиенты» не будет иметь внешнего ключа, указывающего на таблицу «Заказы».

Многие-ко-многимЭто сложная связь, в которой множество записей в таблице могут ссылаться на множество записей в другой таблице. Например, нашему бизнесу, вероятно, нужны не только таблицы «Заказчики» и «Заказы», ​​но, вероятно, также нужна таблица «Продукты».

Опять же, связь между таблицей «Заказчики» и «Заказы» является однозначной, но рассмотрим взаимосвязь между таблицей «Заказы и продукты». Заказ может содержать несколько продуктов, и продукт может быть связан с несколькими заказами: несколько клиентов могут отправить заказ, содержащий несколько одинаковых продуктов. Для такого рода отношений требуется как минимум три таблицы. 

Какие связи с базой данных важны?

Установление согласованных связей между таблицами базы данных помогает обеспечить целостность данных, способствуя нормализации базы данных. Например, что если мы не связали какие-либо таблицы через внешний ключ, а вместо этого просто объединили данные в таблицах Courses и Teachers, например, так:

Teacher_ID
Имя учителя
Курс
Teacher_001КарменБиология, Математика
Teacher_002вероникаматематический
Teacher_003Jorgeанглийский

Учителя и курсы

Эта конструкция негибкая и нарушает первый принцип нормализации базы данных, First Normal Form (1NF), который гласит, что каждая ячейка таблицы должна содержать один отдельный фрагмент данных.

Или, возможно, мы решили просто добавить вторую запись для Кармен, чтобы применить 1NF:

Teacher_ID
Имя учителя
Курс
Teacher_001КарменБиология
Teacher_001Карменматематический
Teacher_002вероникаматематический
Teacher_003Jorgeанглийский

Учителя и курсы

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

Разделение этой таблицы на две таблицы, «Учителя» и «Курсы» (как показано выше), создает правильную взаимосвязь между данными и, следовательно, помогает обеспечить согласованность и точность данных.

Ссылка на основную публикацию