| Особенности хранения полиморфных ссылок в базе данных| Классическая реляционная модель не предусматривает хранения в одной колонке ссылок на различные другие таблицы. Рассмотрим, какие выходы предусмотрены в различных СУБД и в 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 ссылка на конкретный объект? Просветите.
 
 
 
 |