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

Родовая структура


Опишем теперь примитив структурирования для спецификации обобщений в реляционных моделях. В мы ввели типы 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

где:

  1. Ri (1? i ? n) является либо родовым идентификатором
    (и в этом случае должно указываться "key"),
    либо идентификатором некоторого типа
    (и в этом случае "key" не должно указываться);
  2. "список ключей" (keylist) – это последовательность
    si (1? i ? n), разделенных запятыми;
  3. Rij (i = 1, 1 ? j ? p1; ...; i = m, 1 ? j ? pm)
    представляет собой родовой идентификатор с теми же
    самыми ключевыми доменами, что и у R;
  4. каждое ski (1 ? i ? m) является тем же самым, что и
    некоторое sj (1 ? j ? n);
  5. если ski является тем же самым, что и sj, то
    тип "{key} Rj" является множеством {Ri1, ..., Ripi}.



Рис. 5. Родовая структура

Мы используем термин родовой (generic), а не менее точный термин коллекция (collection) с тем, чтобы указать, что определяeтся родовой объект. Родовая структура одновременно специфицирует две абстракции:

  1. R как агрегацию связи между объектами от R1

    до Rn и

  2. 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 (на ) являются существительными естественного языка, необходимы пять семантических условий, чтобы определение отношения специфицировало агрегацию и обобщение.

  1. Каждый R-индивидуум должен определять некоторый уникальный Ri-индивидуум.


  2. Никакие два R-индивидуума не определяют одно и то же множество Ri-индивидуумов для всех Ri, селекторы которых принадлежат "списку ключей".


  3. Каждый Rij-индивидуум должен также быть R-индивидуумом.


  4. Каждый R-индивидуум, классифицируемый как Rij, должен также быть Rij-индивидуумом.


  5. Никакой 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), если его определение удовлетворяет пяти приведенным выше семантическим требованиям.


Содержание раздела