Классика баз данных - статьи

       

При этом подразумевается, что объектный


При этом подразумевается, что объектный тип является наследуемым и что полиморфный компонент может менять свою реализацию. Таким образом, если имеется объектный тип t, в котором определён компонент a, и соответствующие этому типу R-переменные используются в запросах и методах, то создание типа t*, наследующего тип t и переопределяющего реализацию компонента a, не ведет к необходимости менять эти запросы и методы.
Пример. Реализуем объектный тип Sales. Его компонент SaleQty является хранимым
ALTER CLASS Sales REALIZE SaleItems AS STORED;
Реализуем компонент MovedItems, описывающий отгружаемый со склада товар. Поскольку его значение напрямую связано с количеством продаваемого товара (равно ему), необходимо переопределить его как вычисляемый.
ALTER CLASS Sales REALIZE MovedItems AS SUMMARIZE SaleItems BY Art ADD Sum(Pieces) AS Pieces;
Теперь количество находящегося на складе товара будет вычисляться на основании данных не только об отгруженном (GoodsMotion.MovedItems), но и о проданном (Sales.SaleItems) товаре. Это достигнуто за счет изменения реализации полиморфного компонента MovedItems в процессе наследования. Заметим, что при этом ранее определённые схемы и вычисляющие выражения никак не изменились. Например, выражение, возвращающее общее количество штук на всех складах
SELECT SUM(pieces) FROM Warehouse.ResorceItems;
будет возвращать правильные значение вне зависимости от наличия у типов Warehouse и GoodsMotion типов-наследников (конечно же, при условии, что участвующие в вычислении компоненты этих типов переопределены корректно). Выражение не нужно менять, даже если необходимость в таком типе-наследнике возникнет в процессе функционирования системы.

Содержание  Назад  Вперед