Таблица SLOVKAT (п. 14.4) связана с таблицей TELEFON по полю КАТЕГ, а таблица КЛИЕНТЫ связана с таблицей ЗАКАЗЫ ПО полю Код КЛИЕНТА.
Ясно, что составляя таблицу SLOVKAT, мы можем указать в ней и те категории, для которых в TELEFON пока нет записей (например, ДД — Депутаты Думы). Обратное неверно: не имеет смысла включать в TELEFON номер, для которого мы не опре-делили категорию.
В паре SLOVKAT-TELEFON первая таблица считается глав¬кой, а вторая — подчиненной. Поле КАТЕГ для первой таблицы является первичным ключом (Primary Key), а для второй таблицы — внешним ключом (Foreign Key). Кроме того, вторая таблица имеет собственный первичный ключ (НОМЕР).
Иногда главную таблицу называют мастер-таблицей, а подчи¬ненную — таблицей деталей.
Легко видеть, что каждому значению первичного ключа в главной таблице (в нашем случае — каждому значению категории) соответствует одна, несколько или ни одной записи в под-чиненной таблице. Например, вы можете иметь в телефонной книге одного абонента с категорией МН (Магазины), несколько абонентов с категорией ДР (Друзья) и пока ни одного — с категорией ДД.
Такое отношение между двумя таблицами называется связью «Один-ко-Многим».
Точно так же в паре КЛИЕНТЫ-ЗАКАЗЫ первая таблица является главной, а вторая — подчиненной. И здесь мы видим отношение (связь) «Один-ко-Многим».
В самом деле, таблица ЗАКАЗЫ содержит перечень заказов какой-то группы клиентов за определенный промежуток времени (скажем, за полгода). Ясно, что какой-то клиент (например, с кодом 80) за это время мог сделать и один, и несколько заказов, а мог и вообще не заказывать продукты.
Отношение «Один-ко-Многим» — наиболее распространенный тип связи между двумя таблицами в реляционных БД. Реже встречается другое отношение: «Один-к-Одному».
В этом случае каждому значению первичного ключа в главной таблице соответствует одна или ни одной записи в подчиненной таблице. Например, в кадровых системах и службах безопасности часто используют несколько таблиц для хранения разных данных о работниках. В главной таблице хранится общая (формальная и несекретная) информация о всех лицах: табельный номер, фамилия, дата рождения и т. п. В подчиненные таблицы включают особую (или секретную) информацию (например, номер страхового полиса, имя пользователя компьютерной сети и т. п.), и число записей в таких таблицах может быть меньше- (но не больше!) числа записей главной таблицы. Например, не каждый человек из главной таблицы — пользователь сети, но каждый пользователь сети обязательно должен входить в главную таблицу-
Таким образом, для пары связанных таблиц (одна из которых главная, а другая — подчиненная) всегда определен один из двух взаимоисключающих типов связи: «Один-ко-Многим» или «Один-к-Одному».
Одна из функций ИС, которая обеспечивает согласованность информации в связанных таблицах, называется поддержкой целостности данных (см. п. 15.3)
Примечание. Существует также отношение «Много-ко-Многим», но мы его не рассматриваем.