Книга знаний

Инф. технологии / Общие вопросы / Архитектура

Особенности хранения полиморфных ссылок в базе данных

Классическая реляционная модель не предусматривает хранения в одной колонке ссылок на различные другие таблицы. Рассмотрим, какие выходы предусмотрены в различных СУБД и в 1С.Автор статьи: Гений 1С | Редакторы:
Последняя редакция №3 от 29.08.06 | История
URL: http://kb.mista.ru/article.php?id=354

Ключевые слова: ссылки,внешний ключ,foreighn key,схема данных


Рассмотрим простой вариант - в таблице накладных Nakl должна быть ссылка Client, которая может ссылаться на таблицу Persons(физические лица) или на таблицу Organizations(контрагенты).
Типы ключей в Persons и Organizations одинаковые.
Как можно решить эту задачу?

Ключ объекта и номер варианта


В таблицу Nakl вводится дополнительное числовое поле Variant, которое определяет, из какой таблицы берется значение.
Например, 1 означает, что поле ссылается на Persons, 2 - на Organizations.

Ключ объекта и ключ таблицы


Является универсальным следствием предыдущего метода.
Заводится таблица Tables, содержащая список всех таблиц базы данных.
В таблицу Nakl вводится дополнительное поле Client_T, которое указывает на таблицу из Tables и таким образом определяет, из какой таблицы берется значение.

Составной ключ


Этот метод применяется в 1С 77.
Для ссылки используется составной ключ, первая часть которого указывает таблицу из Tables, а вторая - ссылку на объект в этой таблице. Но этот ключ хранится в одном поле.
Преимущество в том, что не требуются дополнительные поля, хотя размер ключа увеличивается.

Сквозная нумерация


В базе существует таблица Objects с полями ID, Table.
Каждый объект при добавлению в базу получает ID из этой таблицы.
По полю Table можно определить, где хранится объект.

Изменение схемы данных


Данная задача может быть решена с помощью нормализации схемы данных.
Вводится дополнительная таблица Contragents.
У каждого объекта Persons и Organizations добавляется поле Contragent, ссылающееся на запись из Contragents, вид отношения один к одному.
Тогда в поле Client таблицы Nakl используется ссылка на таблицу Contragent.
Однако нормализация всей базы - процесс достаточно трудоемкий и порой проигрышный по скорости и объему данных.

Особенности 1С

1С77


У каждого объекта (элемента справочника, документа, счета) используется текстовый ключ, первая часть которого определяет код таблицы, а вторая - ссылка на объект внутри таблицы.

1C80


Для ссылки на объект используется GUID. Я правда не знаю, шифруется ли в этом GUID ссылка на конкретный объект? Просветите.



Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика