Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по IDEF1x.doc
Скачиваний:
19
Добавлен:
28.09.2019
Размер:
671.74 Кб
Скачать

5.9. Идентификация ключевых атрибутов.

Руководствуясь определением атрибута и Правилами для атрибутов, необходимо назначить ключевые атрибуты сущностям. Для поиска атрибутов используем листы функциональной модели и список потенциальных сущностей, составленный нами на этапе определения сущностей. Процесс выбора первичных и альтернативных ключей начинаем с тех сущностей, которые не являются сущностями-потомками в отношениях связи и категоризации. Для каждой сущности составляем список из потенциальных ключей. Подбираем все возможные атрибуты и группы атрибутов, которые могут однозначно

идентифицировать экземпляры сущности. Следует помнить, что в рамках модели отдельный атрибут может принадлежать только одной сущности. Другие сущности могут получить этот атрибут только в случае его миграции посредством отношения связи или категоризации.

Из списка потенциальных ключей нужно выбрать один ключ в качестве первичного, а остальные ключи обозначить как альтернативные. Следующий шаг – выбор первичных ключей для сущностей-потомков и сущностей-категорий. Первичный ключ сущности-потомка в отношении связи должен состоять из мигрирующих атрибутов и из собственных атрибутов сущности, а первичный ключ сущности-категории полностью тождественен первичному ключу общей сущности (допустимо вводить дополнительно только ролевые имена).

5.10. Правила назначения ключей.

При назначении первичных ключей сущностям следует руководствоваться следующими правилами:

1) должны быть устранены все неопределенные отношения,

2) обязательно учитывается миграция ключей от сущности-родителя или общей

сущности к сущности-потомку или сущности-категории,

3) нельзя использовать атрибут, который имеет более одного значения для отдельного

экземпляра сущности одновременно (Правило неповторяемости),

4) нельзя использовать в качестве первичного ключа атрибуты, которые не имеют значения для какого-либо экземпляра сущности,

5) сущность, имеющая составной первичный ключ, не должна делиться на несколько сущностей с более простым первичным ключом,

6) при наличии более одного пути между двумя сущностями требуется утверждение пути.

В соответствии с требованиями первого и второго правила мы уже заменили неопределенные отношения и выявили мигрирующие атрибуты сущностей, поэтому переходим к рассмотрению третьего правила назначения ключей. В качестве примера возьмем сущность ЗАКАЗ. Если первичным ключом сущности выбрать набор атрибутов НОМЕР-ЗАКАЗА и НОМЕР-ПУНКТА-ЗАКАЗА, то образуется противоречие с третьим правилом назначения ключей. Действительно, для одного экземпляра сущности ЗАКАЗ может быть несколько значений атрибута НОМЕР-ПУНКТА-ЗАКАЗА.

Рис. V 5 Пример выполнения Правила неповторяемости

Для разрешения данного противоречия разделяем сущность ЗАКАЗ на две сущности ЗАКАЗ и ПУНКТ_ЗАКАЗА. Между этими сущностями устанавливаем отношение: «Заказ содержит один или несколько пунктов заказа». Тогда первичным ключом сущности-родителя ЗАКАЗ будет атрибут НОМЕР-ЗАКАЗА, а первичный ключ сущности-потомка ПУНКТ_ЗАКАЗА будет состоять из мигрирующего первичного ключа сущности ЗАКАЗ НОМЕР-ЗАКАЗА и из собственного атрибута НОМЕР-ПУНКТА-ЗАКАЗА. См. рис. V 5.

Для иллюстрации правила номер четыре рассмотрим пример. Пусть имеется

отношение связи между сущностями ГОТОВАЯ_ПРОДУКЦИЯ и ПУНКТ_ЗАКАЗА:

«Готовая продукция занесена в ноль, один или несколько пунктов заказа».

В этом случае сущность ПУНКТ_ЗАКАЗА содержит мигрирующий атрибут КОД-ПРОДУКЦИИ. Однако если заказ может быть сделан не только на готовую продукцию, но и

на услуги, возникает противоречие с правилом номер четыре. Для устранения противоречия

вводятся две новые сущности ЗАКАЗ_НА_ПРОДУКЦИЮ и ЗАКАЗ_НА_УСЛУГУ. См. рис.

V 6.

Рис. V 6. Пример выполнения Правила ненулевого атрибута

Для объяснения правила номер пять следует сделать небольшое пояснение. Утверждение пути охватывает два и более путей между сущностью и одним из ее предков. Каждый путь – это определенное отношение связи или отношение категоризации, или ряд таких отношений, приводящий от сущности-предка к сущности-потомку. Например, если сущность ОТДЕЛ имеет две сущности-потомка, ПРОЕКТ и СОТРУДНИК, и они имеют общего потомка - сущность НАЗНАЧЕНИЕ_ПРОЕКТА, тогда имеются два пути между сущностями ОТДЕЛ и НАЗНАЧЕНИЕ_ПРОЕКТА: один через сущность ПРОЕКТ и один через сущность СОТРУДНИК.

Рис. V 7. Пример двух путей между сущностями.

Утверждение пути описывает ограничение на экземпляры сущности предка (например, ОТДЕЛ), с которым каждый экземпляр сущности потомка (например, НАЗНАЧЕНИЕ_ПРОЕКТА) может быть связан. Утверждение пути устанавливает, что или экземпляр потомка должен быть связан с одним и тем же экземпляром предка через каждый путь, или экземпляр потомка должен быть связан через каждый путь с различными экземплярами предка. В примере, приведенном выше, утверждение пути может выглядеть

следующим образом: «сотрудникам могут быть назначены только те проекты, которые принадлежат отделу, в котором эти сотрудники работают», то есть, экземпляр сущности НАЗНАЧЕНИЕ_ПРОЕКТА должен быть связан с одним и тем же экземпляром сущности ОТДЕЛ через оба пути. С другой стороны, утверждение пути может выглядеть и по-другому: «сотрудники не могут быть назначены на проекты, которые принадлежат отделу, в котором они работают», то есть, экземпляр сущности НАЗНАЧЕНИЕ_ПРОЕКТА должен быть связан через каждый путь с различными экземплярами сущности ОТДЕЛ. Третья возможность - «сотрудники могут быть назначены на проекты, которые принадлежат любому отделу». Так как в последнем случае не имеется никакого ограничения, в утверждении пути нет необходимости.

В правиле номер пять сказано, что, когда при создании информационной модели между двумя сущностями возникает два пути, необходимо утверждение пути, при котором определяют, являются ли пути одинаковыми, разными или неопределенными.

Пути одинаковы, если от каждого экземпляра сущности-потомка, и первый, и второй путь приводят к одному и тому же экземпляру сущности-предка. Пути различны, если от каждого экземпляра сущности-потомка, и первый, и второй путь приводят к разным экземплярам сущности-предка. Пути считаются неопределенными, если для одних экземпляров сущности-потомка они равны, а для других – различны. Если один из путей состоит только из одного отношения, и пути равны, то этот путь (это отношение) следует удалить.

Например, на рис. V 8 сущность СОТРУДНИК связана с сущностью ДЕПАРТАМЕНТ двумя путями: напрямую и косвенно через сущность ОТДЕЛ. Если при утверждении пути установлено, что ДЕПАРТАМЕНТ, к которому приписан СОТРУДНИК, и ДЕПАРТАМЕНТ, к которому относится ОТДЕЛ, в котором работает СОТРУДНИК – одинаковы для всех сотрудников, то пути одинаковы. Следовательно, отношение связи между сущностями ДЕПАРТАМЕНТ и СОТРУДНИК необходимо удалить.

Рис. V 8. Пример утверждения пути.

Если ни один из путей не включает не идентифицирующее отношение, то первичный ключ сущности-предка переместится полностью к сущности-потомку по всем путям, приводя к множественным появлениям мигрирующего атрибута в потомке. В этом случае, наряду с утверждением пути могут быть необходимы ролевые имена. Имеются четыре возможные ситуации.

1) Пути одинаковые. Это означает, что экземпляр потомка должен быть связан с одним и тем же экземпляром предка через все пути. В этой ситуации, или не назначают ролевые имена, или назначают одно и то же ролевое имя всем появлениям мигрирующего атрибута в

сущности потомке. Присвоение одного и того же ролевого имени всем появлениям атрибута достаточно для моделирования утверждение пути, так что ограничивающее примечание не нужно.

2) Пути различные. Это означает, что экземпляр потомка должен быть связан через каждый путь с различным экземпляром предка. В этой ситуации, назначают разные ролевые имена для каждого появления мигрирующего атрибута в потомке, и добавляют утверждение пути, устанавливающее, что значения экземпляров сущности-предка должны быть различны.

3) Пути неопределенные. В этой ситуации, назначают разные ролевые имена каждому появлению мигрирующего атрибута в потомке, но не добавляют утверждения пути, которое не нужно в этом случае, потому что присвоение разных ролевых имен позволяет, но не требует, чтобы значения экземпляров предка были различными.

4) Может быть и четвертый вариант: некоторые из экземпляров сущности-предка могут быть или одни и те же, или различные, а другие должны быть одни и те же, или должны быть различны. В этом случае, устанавливают множество утверждений пути, каждый для отдельной ситуации, описанной выше.