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

Материализации

Практически любое агрегированное свойств в платформе можно материализовать. В этом случае свойство будет храниться в базе данных постоянно и автоматически обновляться при изменении данных, от которых это свойство зависит. При этом при чтении значений такого материализованного свойства, эти значения будут читаться непосредственно из базы, как если бы свойство было первичным (а не вычисляться каждый раз). Соответственно, все первичные свойства являются материализованными по определению.

Свойство можно материализовать, тогда и только тогда, когда для него существует конечное число наборов объектов, для которых значение этого свойства не NULL (то есть операция итерации по всем его не NULL значениям будет корректной)

Язык

Для материализации свойства используется опция MATERIALIZED в опциях свойств.

Примеры

sum = GROUP SUM sum(OrderDetail od) BY order(od) MATERIALIZED;
date(OrderDetail od) = date(order(od)) MATERIALIZED;

// такое свойство нельзя материализовать, так как оно не NULL для бесконечного числа дат
lastDate(Customer customer, DATE date) = GROUP LAST date(Order order) IF customer(order) = customer AND date(order) < date;