Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tasks / ПИ-Метод-рекомен-ЛР-Кузнецов-01-сентября-2013.doc
Скачиваний:
180
Добавлен:
13.03.2015
Размер:
4.19 Mб
Скачать

4.4. Создание первичных ключей Ключи в eRwin

Для организации связи между сущностями, а в последствии между таблиццами БД, в Erwin используются ключи.

Первичные ключи

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

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

Каждая сущность должна обладать первичным ключом.

При отображении сущностей в моделях атри­буты сущности разделяются горизонтальной линией на две группы. Атрибуты сущности, образующие первичный ключ, располагаются над горизонтальной линией (рис. 27).

Рис. 27. Отображение первичных ключей

Для каждого первичного ключа ERwin создает при генерации структуры БД уникальный индекс.

Обычно в одной сущности оказывается несколько атрибутов или набор атрибутов, претендующих на роль первичного ключа. Такие претенденты называются потенциальными ключами (Candidate Key).

Каждая сущность должна иметь, по крайней мере, один потенциальный ключ. Многие сущности имеют только один потенциальный ключ. Такой ключ становится первичным. Некоторые сущности могут иметь более одного возможного ключа. Тогда один из них становится первичным, а остальные альтернативными ключами. Альтернативный ключ (Alternate Key) – это потенциальный ключ, не ставший первичным. ERwin позволяет выделить атрибуты альтернативных ключей, и по умолчанию в дальнейшем при генерации схемы БД по этим атрибутам будет генерироваться уникальный индекс.

При создании альтернативного ключа на модели (рис. 27) рядом с атрибутом появляются символы (AK). Когда альтернативный ключ содержит несколько атрибутов, (AKn.m) ставится после каждого. На рис. 27 атрибуты НомерПокупки – основной ключ и входит в альтернативный ключ № 1, ИндексОперации – альтернативный ключ № 1 и внешний ключ, ИндексКлиента – внешний ключ № 2. Если один атрибут входит в состав нескольких ключей, ключи перечисляются в скобках через запятую (атрибут ИндексОперации входит в состав АК1 и FK1). По умолчанию номера альтернативных ключей рядом с именем атрибута на диаграмме не показываются. Для отображения номера следует в контекстном меню, которое появляется, если щелкнуть правой кнопкой мыши по любому месту модели, не занятому объектами модели, выбрать пункт контекстного меню Entity Display и затем включить опцию Alternate Key Designator (AK).

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

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

Выбор первичного ключа

Выбор первичного ключа является непростой задачей, решение которой влияет на эффективность будущей ИС. При выборе первичного ключа должны выполняться определенные правила. Особенности выбора первичного ключа рассмотрим на примере сущности Сотрудник (рис. 28). Здесь можно выделить следующие потенциальные ключи:

1. Табельный номер;

2. Номер паспорта;

3. Фамилия + Имя + Отчество.

Для того, чтобы стать первичным, потенциальный ключ должен удовлетворять требованиям:

Сотрудник

Табельный номер Фамилия Имя Отчество Номер паспорта Должность Номер комнаты Город Улица Дом

Рис. 28. Определение первичного ключа для сущности Сотрудник

  • первичный ключ должен быть уникальным, т. е. два экземпляра не должны иметь одинаковых значений возможного ключа. Потенциальный ключ № 3 (Фамилия + Имя + Отчество) является плохим кандидатом, поскольку в организации могут работать полные тезки. Потенциальный ключ № 3 удовлетворяет требованию уникальности, при условии, что табельные номера уволенных сотрудников не присваиваются вновь принятым на работу;

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

  • первичный ключ должен быть компактен, то есть удаление любого атрибута из состава первичного ключа должно приводить к потере уникальности экземпляра сущности. Для обеспечения уникальности ключа № 3 дополним его атрибутами Дата рождения и Цвет волос. Если бизнес-правила говорят, что сочетания атрибутов Фамилия + Имя + Отчество + Дата рождения достаточно для однозначной идентификации сотрудника, то Цвет волос оказывается лишним, т. е. ключ Фамилия + Имя + Отчество + Дата рождения + Цвет волос не является компактным;

  • атрибуты ключа не должны содержать нулевых значений. Например, если принять в качестве первичного ключа номер паспорта, необходимо быть уверенным, что все сотрудники имеют паспорта. Если допускается, что сотрудник может не иметь паспорта или вместо паспорта иметь какое-либо другое удостоверение личности, то ключ № 2 не подойдет на роль первичного ключа.

  • если для обеспечения уникальности необходимо дополнить потенциальный ключ дополнительными атрибутами, то они не должны содержать нулевых значений. Дополняя ключ № 3 атрибутом Дата рождения, нужно убедиться в том, что даты рождения известны для всех сотрудников;

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

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

  • при выборе первичного ключа предпочтение должно отдаваться более простым ключам, т.е. ключам, содержащим меньшее количество атрибутов. В примере ключи № 1 и 2 предпочтительней ключа № 3.

12. Задайте первичные ключи для сущностей

12.1. С помощью кнопки Атрибуты на панели инструментовСтандартная перейдите в режим отображения модели на уровне атрибутов.

12.2. Сделайте двойной щелчок мышью по нужной сущности, например, Товар.

12.3. Появится окно Attributes (рис. 29).

Рис. 29. Вид окна Attributes

12.4. В разделе Attribute выберите атрибут, используемый в качестве первичного ключа, например Артикул, а на вкладке General включите режим Primary Key (рис. 30).

12.5. Обратите внимание, что у атрибута Артикул в разделе Attribute (рис. 30) появился ярлык с изображением ключа.

Рис. 30. Выбор первичного ключа

12.6. Повторите операции 12.2-12.4 для сущности Заказ и задайте в качестве первичного ключа атрибут НомерЗаказа.

12.7. Проанализировав имеющиеся атрибуты: Фирма, Адрес, Телефон для сущности Клиент, делаем вывод, что ни один из этих атрибутов нельзя использовать в роли первичного ключа. Поэтому для сущности Клиент введем дополнительный атрибут КодКлиента (операции 11.2-11.7) и объявим его первичным ключом (операции 12.2-12.4).

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

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

Рис. 30. Вид модели с ключевыми атрибутами