Связи между таблицами |
Любая запись в одной таблице может быть связана с любой записью другой таблицы. Система управления базой данных, используемая в комплексе, позволяет организовать несколько различных типов связей между таблицами.
Этот тип связи используется редко, обычно с целью оптимизации работы базы данных.
Например, чтобы постоянно "не таскать" все данные о сотруднике (а их достаточно много), таблица "Сотрудники" разбита на две - "Сотрудники" и "Сотрудники (расширение)". Записи этих таблиц связаны между собой отношением "один к одному". Для организации такой связи в обе таблицы помещается поле, содержащее адрес записи другой таблицы. Получается следующая схема:
Рис. 6-7 – Пример связи "Один к одному"
Данный тип связи является одним из самых распространённых.
Например, организации относятся к документам, как один ко многим. То есть одной организации соответствует несколько документов. Еще пример, наименования накладной относятся к накладной как многие к одному.
Реализуется этот тип связи следующим образом:
• в таблице со стороны "один" помещается поле нулевой длины;
• в таблице со стороны "многие" помещается поле, содержащее адрес связанной записи; в этой же таблице строится индекс по полю связи.
Например, связь таблицы "Документы" с таблицей "Организации" выглядит примерно так:
Рис. 6-8 – Пример связи "Один ко многим"
Очень часто у нескольких сущностей часть атрибутов одинакова, а часть различна. К примеру, документы всегда содержат номер и дату, но у накладной и акта приемки ОС есть, очевидно, и разные параметры. В таких случаях удобно использовать условную связь. Фактически, это отношение "один к одному" по условию.
Итак, есть таблица, в которой находятся общие части, и несколько таблиц, содержащих специальные для каждого типа данные. В таблице с общими данными помещается поле, содержащее адрес записи и номер таблицы (1 байт), в котором эту запись искать. В ответных таблицах есть просто поля с адресом записи.
В нашем примере общей является таблица "Документы", которая по условной связи связана с таблицами "Складские документы" и "Платёжные документы".
Это несколько специфичная связь, поскольку в ней участвует только одна таблица. Фактически это отношение записей "один ко многим", но внутри одной таблицы.
В таблицу помещается поле, содержащее адрес записи‑узла иерархии, в котором находится данная запись (4 байта) и, возможно, один байт, указывающий, является ли сама запись узлом (значение - 00) или листом (значение - FF) иерархии. Напомним, что узел - это запись, на которую могут ссылаться другие записи, а лист - это запись, на которую не ссылается никакая другая запись иерархии. Например, в справочнике организаций раздел справочника - это узел, а карточка организации - это лист.
Записи, находящиеся в "корне" иерархии (то есть в самом верхнем уровне), содержат вместо адреса узла специальное зарезервированное значение - FFFFFFF6 (корень).
В программе Jinnee.exe узел иерархии помечается буквой "у" после адреса связанной записи. Если же запись ссылается на "корень" иерархии, то вместо шестнадцатеричного адреса будет стоять строка "корень".