Связи между таблицами

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

Связь "Один к одному"

Этот тип связи используется редко, обычно с целью оптимизации работы базы данных.

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



Рис. 6-7 – Пример связи "Один к одному"

Связь "Один ко многим"/ "Многие к одному"

Данный тип связи является одним из самых распространённых.

Например, организации относятся к документам, как один ко многим. То есть одной организации соответствует несколько документов. Еще пример, наименования накладной относятся к накладной как многие к одному.



Реализуется этот тип связи следующим образом:

•  в таблице со стороны "один" помещается поле нулевой длины;

•  в таблице со стороны "многие" помещается поле, содержащее адрес связанной записи; в этой же таблице строится индекс по полю связи.

Например, связь таблицы "Документы" с таблицей "Организации" выглядит примерно так:



Рис. 6-8 – Пример связи "Один ко многим"

Условная связь

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

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

В нашем примере общей является таблица "Документы", которая по условной связи связана с таблицами "Складские документы" и "Платёжные документы".

Иерархия

Это несколько специфичная связь, поскольку в ней участвует только одна таблица. Фактически это отношение записей "один ко многим", но внутри одной таблицы.

В таблицу помещается поле, содержащее адрес записи‑узла иерархии, в котором находится данная запись (4 байта) и, возможно, один байт, указывающий, является ли сама запись узлом (значение - 00) или листом (значение - FF) иерархии. Напомним, что узел - это запись, на которую могут ссылаться другие записи, а лист - это запись, на которую не ссылается никакая другая запись иерархии. Например, в справочнике организаций раздел справочника - это узел, а карточка организации - это лист.

Записи, находящиеся в "корне" иерархии (то есть в самом верхнем уровне), содержат вместо адреса узла специальное зарезервированное значение - FFFFFFF6 (корень).

В программе Jinnee.exe узел иерархии помечается буквой "у" после адреса связанной записи. Если же запись ссылается на "корень" иерархии, то вместо шестнадцатеричного адреса будет стоять строка "корень".