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



         

Моделирование с помощью родовой структуры - часть 8


Это следует из требования родовой структуры, заключающегося в том, что у каждого кластера имеется свой собственный домен образов. Этот новый объект называется "тип работы" (job-type) и является компонентом объекта "job". Объект "job-type" сам может декомпозироваться на свои объекты-атрибуты.

Во-вторых, заметим, что каждый тип работы является абстракцией всех работ, относящихся к определенному проекту. Поэтому одним из атрибутов типа работы должен быть проект, к которому относятся все его работы. Соответственно, на "project" показан как атрибут "job-type". Объект "project" больше не является непосредственным компонентом объекта "job", как это было на . Теперь он является косвенным компонентом этого объекта через посредство "job-type". Определения объектов "job" и "job-type" приводятся ниже:

var job: generic

TN = (modemproject job, ... , printer project job) of

aggregate [E#, TN] E#: key employee; T: title; PR: payrate; TN: key job-type end

var job-type: generic of

aggregate [TN] TN: typename; P#: key project; AP: average payrate end

Заметим, что "job" представляет собой пример отношения, в котором ключ содержит домен образов.

Введение "job-type" иллюстрирует вид реструктуризации, которая часто может стать необходимой по мере эволюционирования приложения модели. В первоначальном приложении пользователей может интересовать общий класс объектов C. В процессе эволюции приложения некоторым пользователям может стать интересна только подкатегория C-объектов, у которых значением атрибута A является некоторое v1, а другим пользователи может стать интересна подкатегория со значением атрибута A, равным v2. Эти подкатегории C относительно атрибута A должны быть далее представлены как кластер в плоскости обобщения C. На этот кластер {modem project job, ... , printer project job} представляет подкатегоризацию "job" по отношению к "project".

Вообще, если появляется необходимость ввести в существующей модели подкатегоризацию некоторого объекта O по отношению к атрибуту A, то требуется следующая реструктуризация:

  1. определить новый объект S, который абстрагирует класс подкатегорий;
  2. заместить в O домен, который ссылается на A, доменом, который ссылается на S;
  3. если ключ O содержит селектор для A, заменить его селектором для S и
  4. вставить в S домен, который ссылается на A.




Содержание  Назад  Вперед