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




Пример системы, реализующей принцип "Сложность данных в именах". НадРеляционный манифест. - часть 5


Возможны и другие реализации. Например, любой компонент может быть реализован как операция, которая возвращает значение…

ALTER CLASS ... REALIZE Items ... AS SELECT ... ;

…или как алгоритмическая последовательность операций, возможно, выполняющих более сложные вычисление и/или изменяющих состояние системы:

ALTER CLASS Shipment … REALIZE DoShip(ShipmentDate DATETIME) BOOL AS BEGIN … END;

Реализацию можно менять в процессе наследования. Например, определим новый тип SALE, описывающий продажу. Естественно, продаваемый товар, так или иначе, должен отгружаться со склада, и поэтому тип SALE определяется как подтип типа SHIPMENT:

CREATE CLASS SALE EXTEND SHIPMENT { ... SaleItems SET OF { Article STRING; Pieces INTEGER; Price FLOAT; } }

Мы должны хранить информацию о каждом проданном товаре - поэтому компонент SaleItems реализуется нами как хранимый. ALTER CLASS SALE REALIZE SaleItems AS STORED;

Определенный же в родительском классе унаследованный компонент Items (он содержит данные об отгруженных количествах) переопределяется как вычисляемый, что отражает тот факт, что отгруженные количества в точности должны равняться количествам проданным: ALTER CLASS SALE REALIZE Items ... AS SELECT Article, Sum(Pieces) FROM SaleItems GROUP BY Article;

При этом создание класса наследника не влечет за собой необходимости изменять код, использующий спецификацию родительского класса (что присуще ОО-системам). Так, в нашем примере не придется изменять созданный ранее вид ShippedGoods. Это происходит из-за того, что при создании этого вида было использовано отношение Shipment.Items, которое впоследствии было переопределено. Фактически, это отношение содержит данные компонента, реализованного в одних объектах как хранимый, а в других - как вычисляемый (таким образом, само это отношение можно назвать полиморфным). Имеет место аналогия с вызовом полиморфных методов объектов в современных ОО-языках – отличие заключается в том, что при вызове полиморфного метода система неявно выбирает одну из реализаций, отношения же RxO-системы являются результатом неявного объединения




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