Примером системы, которая 1) позволяет пользователю описать
данные достаточно произвольным образом и 2) при этом гарантирует, что эти данные будут представлены для пользователя как множество значений отношений, является RxO-система, описанная в "НадРеляционном Манифесте" [] (далее НРМ), автором которого является ваш покорный слуга.
Описанная RxO-система является ОО-системой. Основное требование НРМ заключается в том, что спецификация объектов системы представляет собой множество компонентов следующих типов:
Эти типы называются значимыми. По сути, они являются аналогом "типов, допускающих реляционное присваивание", определяемых в "Третьем Манифесте". Спецификация компонента объекта может содержать параметры любого из значимых типов.
С учетом того, что ссылочный тип (для которого определены операции только сравнения, присваивания и разыменовывания) относится в НРМ к скалярным типам, можно описывать достаточно сложные структуры данных. В качестве примера рассмотрим следующее выражение, которое определяет спецификацию
типа, описывающего отгрузки
CREATE CLASS SHIPMENT { No INTEGER; // скалярный компонент типа (определенный на домене) INTEGER WareFrom WAREHOUSE // скалярный компонент ссылочного типа WAREHOUSE Items SET OF //компонент типа-отношения { Article STRING; Pieces INTEGER; }.. DoShip(ShipmentDate DATETIME) BOOL; //скалярный компонент, принимающий //скалярный параметр }..
Как видно, объект "отгрузка" имеет сложную структуру (0НФ). Он является частью более сложной структуры, так как содержит ссылку на объект типа WAREHOUSE, доступ к которому может быть описан путевым выражением "someSHIPMENT.WareFrom" (здесь someSHIPMENT -- это ссылка на объект объектного типа SHIPMENT). Возможно, в других частях системы могут существовать ссылки на объект "отгрузка". Компонент Items, содержащий строки заказа, имеет тип отношение (для краткости здесь и далее я буду опускать выражения, определяющие ключи).