С учетом этого изменения схема
С учетом этого изменения схема данных должна будет выглядеть следующим образом.
CLASS cStaff
StaffID AS INT GLOBAL UNIQUE;
StaffName AS STRING;
}
CLASS cGoods{
GoodsID AS INT GLOBAL UNIQUE;
GoodsName AS STRING;
}
PROPERTY pShipmentComments{
Comments AS STRING;
}
PROPERTY pGoodsItems {
Good As cGoods PRIMARY KEY;
Pieces AS INT;
}
CLASS cShipments{
NoS AS LONG GLOBAL UNIQUE;
SDate As DATE;
Staff AS cStaff;
ShipmentItems AS SET OF pGoodsItems;
Comment AS pShipmentComments;
}
CLASS cSuppliesPerDate{
SupplyDate AS DATE GLOBAL UNIQUE;
SupplyItems AS SET OF pGoodsItems;
}
В дальнейшем эта схема будет использоваться в примерах, демонстрирующих возможностей подхода. Оговоримся, что описание управляющего языка не является целью данной статьи. Стремясь сделать примеры наглядными, мы не использовали синтаксис какого-либо конкретного языка программирования: конструкции связанные с объектами близки объектным языкам, синтаксис языка запросов близок к SQL, хотя нельзя не отметить, что возможностей последнего явно недостаточно для того, что бы обращаться к сложно организованным данным.
Свойства системы.
Групповые операции. Ненавигационный доступ к данным.
Рассмотрим класс С со схемой (oa1:R1, …, oan:Rn) содержащий объекты {o1 , … ,om}. Предположим, что существует реляционный оператор
calcR = E( R1, … , Rn), <11>
где Ri – отношения (rdom), на которых определены атрибуты объектов класса С, calcR - отношение (rdom), на котором определен результат. Применим оператор E к объекту oi класса С и рассмотрим выражение oi.E(oa1, … , oan), которое, исходя из значений атрибутов {oa1, … , oan} этого объекта, вычисляет некоторое значение calcr
calcri = oi.E(oa1, … , oan) <12>
Как мы уже показали, атрибут oa объекта o на уровне хранения представлен как
s(raOID= OID, raoa = oa)(R') , где R' = rstorage(oa), <13>
или
s(raOID= OID)(A), где A = s(raoa = oa)(R'). <13'>
Содержание Назад Вперед