Перейти к основному содержимому
Версия: 7.0

Brief: физическая модель

Карта физической модели

Подробная карта одной области — хранения данных в базе. Общая карта элементов находится в Brief, описание механизмов — в разделах Таблицы, Материализации и Индексы.

Эта статья не входит в набор, который всегда передается ассистенту, и запрашивается по мере необходимости.

Что попадает в базу

  • Первичные (DATA) свойства — хранятся всегда.
  • Вычисляемые свойства с опцией MATERIALIZED — хранятся и обновляются автоматически при изменении данных, от которых зависят.
  • Принадлежность объекта классу — хранится так же, как первичное свойство, в поле _CLASS_ИмяТаблицы.
  • Признак полноты таблицы — при необходимости хранится в поле _FULL_ИмяТаблицы.

Свойство можно материализовать тогда и только тогда, когда наборов объектов с не NULL значением у него конечное число.

Таблицы

  • Таблица объявляется инструкцией TABLE со списком классов ключей: TABLE skuStock (Sku, Stock);.
  • Ключевые поля называются key0, ..., keyN, остальные поля хранят значения свойств.
  • Таблица свойства задается опцией TABLE в опциях свойства. Если она не задана, платформа выбирает существующую таблицу с тем же числом ключей и ближайшими классами ключей; опция NODEFAULT исключает таблицу из такого выбора.
  • Если подходящей таблицы нет, создается таблица с именем _auto_<идентификатор класса>_..._<идентификатор класса>.
  • FULL означает, что таблица содержит все существующие объекты классов своих ключей; это используется только для оптимизации выполнения (INNER JOIN вместо LEFT JOIN) и на логику не влияет.

Имена в базе

Имена таблиц и полей зависят от политики именования, задаваемой параметром запуска db.namingPolicy.

Политика именованияИмя таблицыИмя поля
Полная с сигнатурой (по умолчанию)Пространство_ТаблицаПространство_Свойство_Класс1_..._КлассN
Полная без сигнатурыПространство_ТаблицаПространство_Свойство
КороткаяТаблицаСвойство

Имя поля для конкретного свойства можно задать явно.

Индексы

  • Индексировать можно только материализованные свойства.
  • Индекс по одному свойству задается опцией INDEXED, индекс по произвольному списку полей одной таблицы — инструкцией INDEX.
  • Составной индекс может включать и материализованные свойства, и параметры, указывающие на ключевые поля; он должен содержать хотя бы одно материализованное свойство, все свойства в нем должны храниться в одной таблице и использовать один и тот же набор параметров.
  • Типы LIKE и MATCH создают специализированные индексы для одноименных операторов; MATCH для строкового поля работает при наличии trigram/full-text поддержки у текущего адаптера базы, а для поля типа TSVECTOR создает GIN-индекс по самому полю.
  • Автоматически создаются уникальный индекс по всем ключам таблицы и индексы по суффиксам ключей keyK, ..., keyN.

Пересчет

Хранимые значения материализованного свойства пересчитываются из его определения оператором RECALCULATE — это нужно, когда значения могли разойтись с определением, например после изменения определения или прямого исправления данных.

Примеры

TABLE sku (Sku) FULL;
TABLE skuDate (Sku, DATE);

price = DATA NUMERIC[10,2] (Sku, DATE);
sum = GROUP SUM sum(OrderDetail od) BY order(od) MATERIALIZED;

orderDate = DATA DATE (Order) INDEXED;
INDEX supplier(Sku s, DATE d), s, price(s, d), d;