Учитывая сказанное, схема отношения rShipmentItems
Учитывая сказанное, схема отношения rShipmentItems преобразуется в следующую схему свойства ShipmentItems
PROPERTY pShipmentItems{
Good As cGoods UNIQUE;
Pieces AS INT;
}
Модификатор UNIQUE определяет, что поле Good будет уникальным в группе повторения. Поскольку группа повторения свойства представляет собой значение отношения, указанный модификатор фактически определяет первичный ключа атрибута объекта. Существование такого первичного ключа следует из того, что поле rShipmentItems.GoodsID входит в состав первичного ключа отношения rShipmentItems, схема которого послужила основой схемы свойства pShipmentItems. Наличие первичного ключа в свойстве определяет, что значения этого свойства могут образовывать группу повторения, элементы которой (кортежи) должны содержать ссылки на различные объекты класса cGoods. Под "различными" здесь подразумеваются объекты, имеющие разные OID (можно предположить, что возможно переопределение операции сравнения, применимой к объектам данного класса). Свойству ShipmentItems на уровне хранения будет соответствовать отношение rShipmentItems' (отметим наличие симметричной ассоциации (raOID, …, rGoodsref, …) )
rShipmentItems'
raOID
Primary key, Foreign key on R0. raOID
raoa
rGoodsref
Primary key, Foreign key on R0. raOID
rPieces
С учетом всего вышесказанного схема класса cShipments на уровне представления будет выглядеть следующим образом
Class cShipment{
NoS AS LONG GLOBAL UNIQUE;
SDate As DATE;
Staff AS cStaff;
ShipmentItems AS SET OF pShipmentItems;
Comment pShipmentComments;
}
Поля NoS, SDate и Staff являются полями неявно заданного корневого свойства класса cShipment. На уровне представления ему будет соответствовать отношение.
rShipments'
raOID
Primary key, Foreign key on R0. raOID
raoa
NoS
UNIQUE
rSDate
rStaffref
Foreign key on R0. raOID
Таким образом, на уровне хранения объект класса cShipment будет представлен одним кортежем отношения rShipments' (обязательно), одним кортежем отношения rShipmentComments' (возможно), и множеством (возможно пустым) уникальных кортежей отношения rShipmentItems', причем все указанные кортежи будут связаны системным полем raOID с одноименным полем стержневого отношения R0, содержащим уникальный идентификатор этого объекта.