Родовая структура
Опишем теперь примитив структурирования для спецификации обобщений в реляционных моделях. В мы ввели типы collection (коллекция) и aggregate (агрегат), после чего объявили отношение R следующим образом:
var R: collection of aggregate [keylist] s1: {key} R1
... sn: {key} Rn
end
В этом объявлении "список ключей" (keylist) содержит селекторы для ключевых доменов R. Заключение ключевого слова "key" (ключ) в фигурные скобки показывает, что оно не всегда обязано присутствовать. Теперь R может фактически рассматриваться как имя родового объекта. Для того чтобы определить позицию родового объекта R в родовой иерархии, нам необходимо лишь специфицировать его потомков в этой иерархии. Это дает возможность полагать, что структура, показанная на рис. 5, является уместной для определения отношений Кодда.
var R: generic
sk1 = (R11, ..., R1p1); ... skm = (Rm1, ..., Rmpm) of aggregate [keylist] s1: {key} R1; ... sn: {key} Rn
end
где:
- Ri (1? i ? n) является либо родовым идентификатором
(и в этом случае должно указываться "key"),
либо идентификатором некоторого типа
(и в этом случае "key" не должно указываться); - "список ключей" (keylist) – это последовательность
si (1? i ? n), разделенных запятыми; - Rij (i = 1, 1 ? j ? p1; ...; i = m, 1 ? j ? pm)
представляет собой родовой идентификатор с теми же
самыми ключевыми доменами, что и у R; - каждое ski (1 ? i ? m) является тем же самым, что и
некоторое sj (1 ? j ? n); - если ski является тем же самым, что и sj, то
тип "{key} Rj" является множеством {Ri1, ..., Ripi}.
Рис. 5. Родовая структура
Мы используем термин родовой (generic), а не менее точный термин коллекция (collection) с тем, чтобы указать, что определяeтся родовой объект. Родовая структура одновременно специфицирует две абстракции:
- R как агрегацию связи между объектами от R1
до Rn и
- R как обобщение класса, содержащего объекты от R11 до Rmpm.
Домены с селекторами от sk1 до skm являются доменами образов.
Если никакие домены образов не специфицированы, то родовая структура является в точности тем же, что и структура коллекции из .
Прежде чем перейти к обсуждению пяти синтаксических требований к родовой
структуре, определим три отношения на основе . Эти определения показаны на рис. 6. Заметим, что в определении отношения "транспортное средство", его родовые потомки перечислены после зарезервированного слова "generic", а агрегированные потомки – после зарезервированного слова "aggregate". Родовые потомки группируются в кластеры, и каждый кластер ассоциируется с селектором соответствующего ему домена образов. В данном случае домены образов имеют селекторы MC и PC.
var vehicle: generic
MC = (land vehicle, air vehicle, water vehicle); PC = (motorized vehicle, man powered vehicle, wind propelled vehicle) of
aggregate [ID#] ID#: identification number; M: manufacturer; P: price; W: weight; MC: medium category; PC: propulsion category end
var motorized vehicle: generic
MTC = (rotary vehicle, jet vehicle, rocket vehicle) of
aggregate [ID#] ID#: identification number; M: manufacturer; P: price; W: weight; HP: horsepower; FC: fuel capacity MTC: motor category end
var air vehicle: generic
LC = (plane, helicopter) of
aggregate [ID#]
ID#: identification number; M: manufacturer; P: price; W: weight; MA: maximum altitude; TD: takeoff distance;; LC: lift category end
Рис. 6. Определение отношений из
Мы не будем обсуждать два первых синтаксических требования в связи с , поскольку они поясняются в . Требование (iii) сводится к тому, чтобы каждый родовой потомок R объявлялся где-либо как полноправный родовой объект. На это иллюстрируется объявлениями "моторизованного транспортного средства" и "воздушного транспортного средства". Более того, все эти объекты-потомки должны иметь тот же самый ключевой домен, что и R. Это требование позволяет ссылаться на объекты-индивидуумы унифицированным образом независимо от того, в какой родовой класс они входят.
Иногда полезным исключением из этого правила является то обстоятельство, что если ski
входит в ключ R, то оно не обязательно должно появляться в ключе какого-либо Rij (1 ? j ? pi). Если бы оно все-таки появлялось, этот домен имел бы одно и то же значение для каждого индивидуума в Rij. Предположим, например, что на PC было бы объявлено как входящее в ключ объекта "транспортное средство". Если мы после этого добавили бы "категорию мотора" как новый домен в отношение "моторизованное транспортное средство", то, чтобы удовлетворить требование (iii), этот домен должен был бы иметь одно и то же значение ("моторизованное транспортное средство") для каждого индивидуума.
Требованию (iv) обеспечивает, чтобы каждый специфицированный кластер ассоциировался с конкретным доменом (образов). Требование (v) обеспечивает, чтобы каждый домен образов мог действительно допускать в качестве значений родовые идентификаторы, перечисленные в ассоциированном с ним кластере. Например, в определении объекта "транспортное средство" на тип "категория среды перемещения" должен где-то определяться как множество идентификаторов, "наземное транспортное средство", "воздушное транспортное средство" и "водное транспортное средство".
Если определение отношения удовлетворяет этим пяти синтаксическим требованиям, то это не дает гарантии, что данное определение специфицирует осмысленную абстракцию агрегации и осмысленную абстракцию обобщения. Рассмотрим теперь, какие дополнительные требования необходимы, чтобы специфицировались осмысленные абстракции. Эти требования должны быть семантическими и каким-либо образом связанными с нашим интуитивным пониманием реального мира.
Поскольку базы данных обычно предназначаются для моделирования реального мира, как мы его понимаем, мы можем с уверенностью потребовать, чтобы все имена объектов в определении отношения были именами существительными естественного языка. Эти существительные впоследствии обеспечивают мост между нашим интуитивным пониманием реального мира и задаваемым его отражением в определении отношения.
Если существительные естественного языка не используются, любое обсуждение осмысленности определения отношения представляется спорным.
Если предположить, что R, каждое Ri
и каждое Rij (на ) являются существительными естественного языка, необходимы пять семантических условий, чтобы определение отношения специфицировало агрегацию и обобщение.
- Каждый R-индивидуум должен определять некоторый уникальный Ri-индивидуум.
- Никакие два R-индивидуума не определяют одно и то же множество Ri-индивидуумов для всех Ri, селекторы которых принадлежат "списку ключей".
- Каждый Rij-индивидуум должен также быть R-индивидуумом.
- Каждый R-индивидуум, классифицируемый как Rij, должен также быть Rij-индивидуумом.
- Никакой Rij-индивидуум не является также Rik-индивидуумом при j ? k.
Под R-индивидуумом (Ri- или Rij-индивидуумом) мы понимаем некоторый экземпляр родового объекта R (Ri или Rij) в том виде, как он появляется в реальном мире.
Первые два условия являются необходимыми для абстракции агрегации и обсуждаются в . Остальные три условия являются необходимыми для абстракции обобщения. Условие (iii) обеспечивает, чтобы Rij являлось подклассом R и, таким образом, чтобы Rij
могло быть обобщено до R. Например, в моторизованные транспортные средства V1, V3 и V5 являются также транспортными средствами. Условие (iv) обеспечивает, чтобы Rij содержало все R-индивидуумы, классифицированные как относящиеся к Rij. Например, в "моторизованное транспортное средство" содержит все транспортные средства, классифицированные таким образом в "транспортном средстве". Условие (v) обеспечивает, чтобы кластеры содержали взаимно-исключающие классы.
Будем говорить, что отношение является правильно определенным (well-defined), если его определение удовлетворяет пяти приведенным выше семантическим требованиям.