...

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

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

  • одно поле должно быть уникальным в своей таблице, а другое – нет
  • оба поля должны быть уникальными

Чаще всего для создания уникального ключевого поля используют тип «счетчик», так как он автоматически создает уникальный код. В противном случае, если использовать другой тип поля, придется создавать процедуры, генерирующие его уникальное значение.

Один к одному

Такая связь означает, что на одну запись в главной таблице приходится так же одна запись в связанной. Разнесения данных по разным таблицам и связывания их потом такой связью обычно делают, когда хранить все данные в одной таблице по каким то причинам (но не в плане нормализации) не целесообразно. То есть, проще говоря – таблицу просто разделил на две (или больше) и связали их такой связью, например, потому, что количество полей в таблице очень велико и  удобнее разбить их на группы и держать в разных таблицах.
Используется такая связь обычно редко. Пример связи один к одному:

Обозначение 1

Код записи

Текст 1

1

Текст 2

2

Текст 3

3

Код записи

Обозначение 2

1

Текст 4

2

Текст 5

3

Текст 6

Как видим, это то же самое, как если бы данные были в одной таблице

Код записи

Обозначение 1

Обозначение 2

1

Текст 1

Текст 4

2

Текст 2

Текст 5

3

Текст 3

Текст 6

При этом, оба ключевых поля в своих таблицах уникальны – это могут быть к примеру поля типа «Счетчик».

Один ко многим

Это самый распространенный тип связи, означающий, что на одну запись в главной таблице приходится множество записей в подчиненной. Для организации этого нужно, чтобы ключевое поле связи в главной таблице было уникальным (например, тип «счетчик»), а соответствующее поле связи в подчиненной – не уникальным, но того же типа (числовое). В результате получаем одну запись в главной таблице и множество записей связанных с ней по ее коду в подчиненной.

Обозначение 1

Код записи

Текст 1

1

Текст 2

2

Текст 3

3

Код связи

Код записи

Обозначение 2

1

1

Текст 4

1

2

Текст 5

1

3

Текст 6

2

4

Текст 7

2

5

Текст 8

2

6

Текст 9

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

Многие ко многим

Внимательный читатель наверняка скажет: а как быть с вариантом, когда у одного учителя много учеников, и в то же время один и тот же ученик учится у разных преподавателей?
Все верно – и такую связь так и называют: многие ко многим. Но для ее реализации потребуется уже три таблицы: учителя, ученики и коммутирующая таблица.
Смысл третье таблицы – задавать соотношения между ключами первых двух. Представьте железнодорожный узел, где переключаются ветки, перенаправляя поезда с одной дороги на другую. Или Switch, который делает то же самое с компьютерами, подключенными через него в сеть.

ФИО учителя

Код учителя

Иванов

1

Петров

2

Код ученика

ФИО ученика

1

Сидоров

2

Павлов

Код учителя

Код ученика

1

1

1

2

2

1

2

2

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

1 2 3 4 5 6 >>