Skip to main content

Базы данных. Реляционные (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 Пиццы Маргарита

Зачем эти связи нужны?

 • чтобы не хранить одно и то же

 • чтобы данные были логичными и непротиворечивыми