Поле DomainRule может быть пропущено. Если упомянуто, оно должно быть списком значений member( [ v1, v2, ..., vn ], R )
или предлагать минимальное значение
lowValue ² R,
или максимальное
R ² highValue
или набор
lowValue ² R, R ² highValue.
Домен-потомок
D2. Домен, который является подтипом другого домена, называется потомком. Для каждого домена-потомка, d, где d подтип домена t, выполняется следующее
D2.1. Описываем связь наследования
d isa t
d isa t верно в том случае, когда каждая сущность d одновременно является сущностью t.
D2.2. Добавим ещё одно правило
( for all * ) ( exists d: R ifdef exists t: R, DomainRule )
exists d: R верно, если d: R – сущность домена d.
Как и с доменом-предком, поле DomainRule может отсутствовать.
Пример
Для TcCo, результирующее правило будет включать следующее
exists name: R ifdef not R = null, character( R ).
exists part_name: R ifdef exists name: R.
exists make_part_name: R ifdef exists part_name: R.
exists part_type: R ifdef not R = null, character( R ), [ m, b ] has member: R.
exists quantity: R ifdef not R = null, numeric( R ), 0 ² R.
part_name isa name.
make_part_name isa part_name.
В соответствие с правилами для TcCo, следующее верно для примеров.
exists part_type: m.
exists name: top.
exists part_name: top.
make_part_name: top → part_name: top.
make_part_name: top → name: top.
not exists part_type: s.
not name: top → part_name: top.
not qty_on_hand: 3 = standard_price: 3.
B.4.2.4 Атрибут
Как уже тысячу раз отмечалось, в IDEF1X атрибуты есть у сущности только с точки зрения определнного представления. Это представление описывается графически диаграммой, на которой изображаются все сущности этого представления и их атрибуты. Рассмотрим процедуры создания правил, связанных с атрибутами сущностей.
A1. For Для каждого представления v, и каждой сущности e, в v, где у e есть атрибуты a1, a2, ..., an, выполняется следующее для 1 =< i =< n.
A1.1 Декларируется сущность
viewEntityAttribute( ( v: e ): ai )
A1.2. Добавляется свойство ai
( for all * ) ( ( v: e ): I has ai: ( ai: Ai ) ifdef
v_e( I, A1, A2, ..., An ),
not Ai = null )
Выражение v: e – специфичная сущность, ( v: e ): I – экземпляр специфичной сущности, ai атрибут экземпляра специфичной сущности, и ai: Ai - домен. Выражение( v:e): I has ai: ( ai: Ai ) означает, что у экземпляра специфичной сущности ( v: e ): I есть атрибут ai со значением ai: Ai. Отметим, что null не рассматривается как значение, он рассматривается как отсутствие любого значения. Если выражению v_e сопоставлено значение null поля “value” атрибута ai для сущности I, тогда ( v: e ): I has ai: X ложно для всех X.
Предикат v_e это значение, не сущность, в отличие от обычного способа показать пример сущности таблицы. Правило для описания свойств создает экземпляры доменов из домена ai и значения Ai. Атрибут домена точно показывает, что результат ai: Ai – это действительно экземпляр домена.
A1.3. Если ai не допускает пустого значения, добавим следующее правило
( for all * ) ( if exists ( v: e ): I
then ( for some A ) ( ( v: e ): I has ai: A ) )
A2. Добавим правило для того, чтобы экземпляр сущности мог быть 1:1 с составным значением других позиций
( for all * ) ( if exists ( v: e ): I1, exists ( v: e ): I2
then I1 =I2
iff
( ( v: e ): I1 has a1: A iff ( v: e ): I2 has a1: A ),
( ( v: e ): I1 has a2: A iff ( v: e ): I2 has a2: A ),
...
( ( v: e ): I1 has an: A iff ( v: e ): I2 has an: A ) )
Правило 1:1 схватывает идею моделирования, когда две сущности считаются разными только тогда, когда они отличаются хотя бы одном атрибутом.
Пример
Для TcCo, результирующее правило будет включать следующее
viewEntityAttribute( ( production: part ): part_name ).
( for all * ) ( ( production: part ): I has part_name: ( part_name: A1 ) ifdef
production_ part( I, A1, A2, A3, A4, A5 ),
not A1 = null )
( for all * ) ( if exists ( production: part ): I
then ( for some A ) ( ( production: part ): I has part_name: A ) ).
В соответствие с правилами для TcCo, следующее верно для примеров.
( for some PN ) ( ( production: part ): i2 has part_name: PN,
PN has value: top ).
not ( for some BP ) ( ( production: part ): i1 has backup_price: BP ).
Б.4.2.5 Идентифицирующие отношения связи
В IDEF1X сущность имеет связи только внутри представления. Представление представлено графически в виде диаграммы, показывающей сущности в представлении и их связи. Если имеется множество представлений (например, множество диаграмм), следующая процедура создает правила в теории, которые соотносятся с идентифицирующими связями в представлении.
С1. Для каждого представления v в множестве представлений и каждой сущности е1 и сущности е2 (не обязательно различающихся) в v с идентифицирующей связью между е1 и е2, где:
е1 – родитель
е2 – потомок
n1 – имя связи от е1 к е2 (называется так же, как е2, если имя не указано)
n2 – имя связи от е2 к е1 (называется так же, как е1, если имя не указано)
сделайте следующее.
С1.1. Добавьте правила ограничения домена для предиката связи
(для всех *) ( если v_e1_n1_n2_e2 (I,J)
тогда существует (v: e1): I, существует (v;e2): J)
к теории. Правило ограничивает первое положение отношения в экземпляре родителя и ограничивает второе положение в экземпляре ребенка.
С1.2. Объявите участвующие свойства сущностей путем добавления правил
участвует в представлении сущности ((v: e1): n1)
и
участвует в представлении сущности ((v: e2): n2)
к теории. Каждый экземпляр участия в отношениях (родитель или потомок) имеет свойство участника, значение которого определяет другого участника (родитель или потомок).
С1.3. Добавьте правила на свойства участников
(для всех *) (v: e1): I имеет n1: J, если определено v_e1_n1_n2_e2(I,J)).
и
(для всех *) (v: e2): J имеет n2: I, если определено v_e1_n1_n2_e2(I,J)).
к теории. В данной интерпретации, (v: e1): I имеет n1: J истинно, если экземпляр представления сущности (v: e1): I имеет в качестве свойства участника значения n1 идентификатор J другого участника.
С1.4. Ограничьте каждого потомка одним родителем, добавив правило
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.