Виды связей между таблицами

Автор: Aport Суббота, Январь 31st, 2015 Нет комментариев

Рубрика: MySQL

Связь позволяет моделировать отношения между объектами предметной области. Наименование связи должно быть уникально во всей модели.

Существует 4 типа связей:

1. «Один к одному» - любому экземпляру сущности А соответствует только один экземпляр сущности В, и наоборот.

Виды связей между таблицами
Пример 1: Пример 2:
id parent_id name
1 0 Папа
2 1 Дочь

Как видим, у Папы нет родителя (Бабушек и Дедушек добавлять не будем), а у Дочери есть один родитель Папа. Таким образом, Маму и Сына мы сюда добавить не можем, иначе вид связи будет уже другим.

id class_id name
1 3 Сидоров
2 4 Зайцев

Сидоров учится в 3-ем классе, а Зайцев в 4-ом классе.

Чтобы не запутаться, обратите внимание, в полях id и parent_id не может быть повторений.

2. «Один ко многим» — любому экземпляру сущности А соответствует 0, 1 или несколько экземпляров сущности В, но любому экземпляру сущности В соответствует только один экземпляр сущности А.

Виды связей между таблицами
Пример 1: Пример 2:
Из отпуска вернулся Сын и семья теперь в таком составе:

id parent_id name
1 0 Папа
2 1 Дочь
3 1 Сын

Как видите, id не повторяется, а parent_id повторяется, вот и получилась связь — один ко многим.

Сидоров закончил 3-ий класс и перешел в 4-ый, а Зайцев плохо учился и его оставили на второй год.

id class_id name
1 4 Сидоров
2 4 Зайцев

Как видите, id не повторяется, а class_id повторяется, вот и получилась связь — один ко многим.

3. «Многие к одному» - любому экземпляру сущности А соответствует только один экземпляр сущности В, но любому экземпляру сущности В соответствует 0, 1 или несколько экземпляров сущности А.

Виды связей между таблицами


Какая же разница между связями «один ко многим» и «многие к одному»? Такая же, как между фразами «родители детей» и «дети родителей». То есть важно, кто во взаимоотношении двух объектов главный.

Пример 1: Пример 2:
Мы просто поменяли местами столбцы и теперь главным столбцом у нас является parent_id

parent_id id name
0 1 Папа
1 2 Дочь
1 3 Сын
Мы просто поменяли местами столбцы и теперь главным столбцом у нас является class_id

class_id id name
4 1 Сидоров
4 2 Зайцев

Если при определении связи вам сложно выделить подчиненность, то вывод только один: вы плохо разобрались в предметной области.

4. «Многие ко многим» — любому экземпляру сущности А соответствует 0, 1 или несколько экземпляров сущности В, и любому экземпляру сущности В соответствует 0, 1 или несколько экземпляров сущности А.

Виды связей между таблицами

Такой тип связи очень широко распространен, так как описывает реальные непростые жизненные отношения.

Пример 1: представим, что с командировки вернулась Мама, а Дочь уехала в отпуск (мы получили таблицу изображенную слева). Как Вы понимаете, теперь Сыну нужно указать второго родителя, и сделать это в той же таблице было бы неправильно, поэтому делаем отдельную связывающую таблицу (изображенную справа).

id name
1 Папа
2 Мама
3 Сын
id parent_id
1 0
2 0
3 1
3 2

 

Пример 2: Наши ученики учатся у нескольких преподавателей. И каждый преподаватель работает со многими учениками.

ФИО учителя Код учителя
Иванов 1
Петров 2
Код учителя Код ученика
1 1
1 2
2 2
2 1

Как видим, таблицы учеников и учителей связаны между собой не напрямую, а через таблицу — коммутатор, в которой задается, какой код учителя соответствует ученику.

Обратите внимание, в связующих таблицах повторяются значения как слева, так и справа, таким образом понимаем, наша связь — многие ко многим.

 

Источник: yapro.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты