Связь Один-ко-Многим в базах данных
Last updated: 7 мая 2025 г.Есть таблица "Продукты"
. У каждого продукта может быть категория, к которой он принадлежит.
Например, стол и стул относятся к категории мебель, а лампа, утюг и вентилятор к категории электроприборы.
Давайте же добавим в таблицу из прошлого урока аттрибут "Категория продукта"
.

Как видим, слово Электроприбор повторяется три раза, слово мебель два раза.
А что если у нас в таблице будет больше электроприборов и больше мебели, то значит у нас в таблице будут повторяться эти два слова еще больше раз?
Именно поэтому добавлять такой аттрибут, значения которого повторяются много раз, нельзя, так как мы с вами сейчас изучаем реляционную модель
базы данных, которая определяет некоторые правила создания БД чтобы в ней практически вообще не было повторяющейся информации.
Так как же нам поступить с новым добавленным аттрибутом чтобы не было повторяющейся информации?
Всё просто, нужно его вынести в отдельную таблицу и в ней уже будут храниться уникальные значения, а потом получившиеся две таблицы связать между собой.
То есть мы сейчас подошли к двум новым концепциям – идентификаторам
(чаще называют ключами) и связям
.
Разбиваем таблицу. Вторая таблица будет иметь имя Категория продукта.

Как видим теперь информация не повторяется.
Теперь как же связать эти две таблицы?
Для этого используется идентификатор
(ключ).
Что же такое идентификатор?
Например, в таблице Продукт можно увидеть аттрибут Идентификатор продукта.
Идентификатор в этой таблице идентифицирует продукт, по нему можно отличить один продукт от другого.
Соответственно идентификаторы у продуктов в таблице обязательно должны быть разными чтобы по идентификатору можно было обратиться к одному конкретному продукту.
Идентификаторы продуктов хранятся в отдельном столбце таблицы и ясное дело, как уже было сказано, в этом столбце не должно быть одинаковых значений.
Идентификатор чаще всего это простое числовое значение.
Таблице с категориями тоже добавим аттрибут Идентификатор категории
, который будет хранить значения, которые однозначно идентифицируют ту или иную категорию.

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

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

Если бы мы не разделяли таблицы, то дублировалось бы уже два аттрибута:

Теперь профит от разделения таблиц должен быть очевиден.
Рассмотренный тип связи называется 'Один-ко-многим'
.
Всего типов связей три и мы всех их разберем.
Один ко многим эта связь, потому что каждому продукту может соответствовать только ОДНА категория, но каждой категории может соответствовать МНОГО продуктов.
То есть у нас категории мебель (она одна) соответствует два продукта (их много), а категории электроприборы (она одна) соответствует три продукта (их много).
Следующие уроки
Связь Многие-ко-Многим в базах данных
16
мин.
Связь Один-к-Одному в базах данных
13
мин.
Основы SQL. Что такое СУБД и MySQL
9
мин.