Базы данных. Реляционные (SQL). Типы связей
Базы данных. Реляционные (SQL). Типы связей
Базы данных чаще всего содержат таблицы, которые связаны друг с другом различными связями (relation).
Связи между таблицами бывают следующих типов:
😕 Один к одному (One-to-One)
Это редкий тип связи. В этом случае одна запись в одной таблице можно сопоставить только с одной записью в другой таблице.
Пример
Есть таблица «Пользователи». У каждой записи в таблице пользователи есть ID
ID | NAME | BIRTH
1 | Sasha | 07.03.1786
2 | Alex | 02.04.2017
3 | Masha | 03.06.2020
Есть таблица «Документы». У каждого записи в таблице документы есть ID
ID | TYPE | USER_ID
1 | Passport | 1
2 | Birth cert. | 3
3 | Birth cert. | 2
Так вот у одного пользователя, может быть только один документ. В таблице Документы не будет записей, где USER_ID повторяется
🥰 Один ко многим (One-to-Many)
Наиболее часто встречающийся тип связи . В этом типе связей в дочерней таблице может быть несколько строк, которые относятся к родительской таблице
Пример
Есть таблица «Пользователи». У каждой записи в таблице пользователи есть ID
ID NAME BIRTH
1 | Sasha | 07.03.1786
2 | Alex | 02.04.2017
3 | Masha | 03.06.2020
Есть таблица «Контакты». У каждого записи в таблице документы есть ID
ID | TYPE | NICKNAME | USER_ID
1 | inst | big-flick-energy | 3
2 | google | masha-trap | 3
3 | google | sasha-1993 | 1
У одного пользователя может быть много контактов. Например у пользователя с ID 3 есть 2 контакта: inst и google
🛏 Многие ко многим (Many-to-Many)
Например: один заказ может содержать несколько блюд, и одно и то же блюдо может входить в несколько разных заказов. Но мы не можем установить прямую связь многие ко многим между двумя таблицами. Это делается посредством вспомогательной промежуточной таблицы.
Таблица заказы:
order_id customer_name order_date
1001 Иван Петров 2024-01-15
1002 Анна Сидорова 2024-01-15
1003 Иван Петров 2024-01-16
Таблица блюда в меню
dish_id dish_name price
1 Пицца Маргарита 550
2 Цезарь с курицей 450
3 Тирамису 350
Таблица, которая их связывает «Состав заказов»
order_id dish_id quantity
1001 1 1
1001 3 2
1002 2 1
1002 3 1
1003 1 2
То есть
— В заказ 1001 входит 1 Пицца Маргарита
— В заказ 1001 входит 2 Тирамису
— В заказ 1002 входит 1 Цезарь
— В заказ 1002 входит 1 Тирамису
— В заказ 1003 входит 2 Пиццы Маргарита
Зачем эти связи нужны?
• чтобы не хранить одно и то же
• чтобы данные были логичными и непротиворечивыми