#std728¶
Ограничения на использование реквизитов составного типа¶
1.1.¶
Если реквизит составного типа используется в соединениях, отборах или сортировке, оставляйте в его составе только ссылочные типы:
СправочникСсылка.[…], ДокументСсылка.[…] и т. п.
Не включайте в такой составной тип нессылочные значения:
Строка, Число, Дата, УникальныйИдентификатор, Булево, ХранилищеЗначения.
Иначе производительность запросов заметно снижается из-за особенностей физического хранения составных типов в таблицах СУБД. Подробности: Особенности хранения составных типов данных.
1.2.¶
Если требуется совместить ссылку и произвольный ввод, используйте отдельный справочник вместо примитивного типа.
Пример: в документе есть реквизит Адрес составного типа, который включает ссылку на справочник Контакты и Строку.
Вместо этого создайте отдельный справочник ПроизвольныеАдреса и включите его в тип реквизита Адрес вместо строки.
Новые элементы справочника ПроизвольныеАдреса добавляйте автоматически при записи документа, без участия пользователя.
Удаление неиспользуемых элементов выполняйте регламентным заданием.
1.3.¶
Исключение могут составлять таблицы, в которых заведомо мало данных (до 1000 записей).
2.1.¶
Для типизированных объектов метаданных, которые хранятся в ИБ, не используйте составные типы ЛюбаяСсылка, СправочникСсылка, ДокументСсылка и аналогичные.
Состав типов каждого такого объекта задавайте явно.
Исключение составляют универсальные механизмы (алгоритмы), действительно рассчитанные на работу с произвольными ссылочными объектами.
Проблемы избыточно широких составных типов:
- при обращении «через точку» к реквизиту такого типа без
ВЫРАЗИТЬвыполняется неявное соединение со всеми таблицами из состава типа, что существенно ухудшает производительность; - возникают лишние реструктуризации при удалении ссылочных объектов метаданных (например, значений перечислений или точек маршрута бизнес-процесса, которые тоже входят в
ЛюбаяСсылка); - неоправданно усложняются алгоритмы, которые начинают поддерживать широкий набор типов, не нужный для прикладной задачи;
- сложнее анализировать работу механизма внедренцам и сторонним разработчикам;
- пользователю неудобно выбирать значение в форме из слишком большого списка типов (когда реально нужно 3-5 типов);
- при удалении помеченных объектов растут издержки анализа и блокировок таблиц при поиске ссылок.
2.2.¶
Если составной тип массово используется в объектах подсистемы или всей конфигурации, применяйте #std704: определяемые типы.
Исключение: типы ведущих измерений регистров универсальных (библиотечных) механизмов, рассчитанных на произвольные ссылочные объекты.
Если в этом случае сужать определяемый тип в конфигурации, придется пересоздавать библиотечный регистр, что недопустимо.
Поэтому здесь использование ЛюбаяСсылка, СправочникСсылка, ДокументСсылка и аналогичных типов оправдано.
См. также¶
Проверки¶
#v8cs:db-object-anyref-type #v8cs:db-object-ref-non-ref-type