- •Методические указания по выполнению лабораторной работы №1
- •Оглавление
- •Введение
- •Нормализация и нормальные формы
- •Цель работы
- •Сценарий работы
- •1Исходные данные для упражнения
- •2.2Начало создания модели
- •2Методика информационного моделирования в среде Design/idef
- •2.1Основы idef1x
- •Создание сущностей
- •Создание отношений
- •2.3Изменение и расширение модели
- •Создание дискриминатора и сущностей-категорий
- •2.4Улучшение внешнего вида модели
- •Редактирование модели
- •2.5Изучение других свойств idef1x
Щёлкните в левой верхней части окна, чтобы поместить там сущность.
Появится окно диалога Define Entity
Вы можете ввести имя сущности. Вы должны заполнить поле Aliases (Псевдонимы) (если у сущности существуют псевдонимы) и поле Definition (Определение).
Заполните поля диалога.
Нажмите кнопку Add.
Появится окно Define Attribute.
Вкладка Attributes содержит следующие кнопки:
Кнопка Add… (Добавить) позволяет вам добавить атрибут не закрывая окна.
Кнопка ОК отправляет сведения о сущности и её атрибутах на хранение и закрывает окно диалога.
Кнопка Cancel служит для закрывания окна диалога без сохранения любых внесенных вами изменений.
Окно Define Attribute содержит несколько полей для характеристик атрибутов.
Поле Name (Имя) должно быть заполнено.
Всегда проверяйте правильность выбора типа атрибута.
Хотя это и необязательно, следует всё-таки вводить любые физические характеристики атрибута, которые вам известны.
Совет: Вы можете начинать каждое имя атрибута с части или с целого имени сущности. Это поможет вам идентифицировать сущность, которая владеет этим атрибутом и предотвратить возможные конфликты с другими сущностями и атрибутами, создаваемыми позднее.
Поля Alternate Key (Альтернативный ключ) и Inversion Entry (Перестановка) служат для определения соответствующих характеристик ключа.
З аполнение полей атрибута
З аполним поля атрибута информацией.
Заполните поля в окне Define Attribute всех известных характеристик: Name, Definition, Type, Data Type, Length, Precision, Primary Key, Discriminator, Alternate Keys и Inversion Entries.
Нажмите Add (Добавить), чтобы ввести сведения об атрибуте и перейти к следующему атрибуту.
Обратите внимание, что на экране пробелы в имени атрибута заменены знаком «тире» (-).
Совет: Когда вы нажимаете кнопку Add, в поле Name остаётся имя последнего атрибута. Вы можете или напечатать новое имя в выделенной строке, или щёлкнуть на имени указателем и заменить только часть имени атрибута.
Когда закончите вводить все атрибуты сущности нажмите Ok.
Теперь окно диалога имеет следующий вид:
Нажмите ОК, чтобы завершить диалог.
Наша диаграмма IDEF1X должна быть похожа на представленную на рисунке:
Рассмотрим приведенную выше последовательность действий на нашем примере.
Создадим сущность Заказчик
Создадим сущность.
Заполним поля диалога следующими данными:
Поле |
Значение |
Name (Имя) |
Заказчик |
Definition (Определение) |
Тот, кто приобретает или уже приобрёл один или более продуктов компании PS |
Получаем следующее:
Добавим атрибуты сущности
Name |
Definition |
Type |
Data Type |
Length |
имя заказчика |
Имя человека, сделавшего заказ |
Non-primary |
CHAR |
40 |
адрес заказчика |
Адрес для доставки, сообщенный заказчиком. Должен включать улицу, город, страну и почтовый индекс или иностранный почтовый код |
Non-primary (Не первичный) |
CHAR (символьный) |
80 |
телефон заказчика |
Номер телефона, по которому можно связаться с заказчиком в течение дня. Должен включать код города и добавочный номер |
Non-primary |
CHAR |
18 |
Создадим сущность Заказ
Создадим сущность.
Заполним поля диалога следующими данными:
Поле |
Значение |
Name (Имя) |
Заказ |
Definition (Определение) |
Официальный заказ одного или более продуктов компании PS |
Получаем следующее:
Зададим атрибуты сущности
Name |
2.2.1.1Definition |
Type |
Data Type |
Length |
номер заказа |
Уникальный номер, присвоенный полученному компанией PS заказу. Если заказ получен по телефону, то для него резервируется номер, пока не будет получено письменное подтверждение заказа. |
Primary |
INTEGER |
(N/A) |
дата заказа |
Дата получения заказа компанией PS. |
Non-Primary |
CHAR |
12 |
Создадим сущность Продукт
Создадим сущность.
Заполним поля диалога следующими данными:
Поле |
Значение |
Name (Имя) |
Продукт |
Definition (Определение) |
Покупаемое ПО |
Получаем следующее:
Зададим атрибуты сущности
Name |
2.2.1.2Definition |
Type |
Data Type |
Length |
Precision |
наименование продукта |
Наименование ПО, которое должно включать номер версии |
Primary |
CHAR |
24 |
(N/A) |
цена продукта |
Розничная цена продукта |
Non-Primary |
NUMBER |
10 |
2 |
Диаграмма будет выглядеть так:
Что делать, если нужно внести исправления
Заранее невозможно предугадать, где вы смогли допустить ошибку. Однако, это может быть одна из ошибок, которые легко исправить. Например, вы могли совершить ошибку при вводе текста, пропустить атрибут или неправильно его идентифицировать. Если же вы допустили ошибку, причину которой не можете обнаружить, или которую нельзя исправить, то вам придётся создавать модель заново.
При необходимости, вернитесь к тому параграфу данной главы, в котором содержится информация о сущностях.
И справляйте ошибки поэтапно:
Если вы находитесь в режиме создания сущностей, выйдите из него.
Выделите сущность, которую хотите редактировать, затем выберите из меню Glossary | Glossary Entry или дважды щёлкните на самой сущности.
Если вы:
Сделали опечатку в имени или определении сущности, просто исправьте её.
Пропустили атрибут, используйте окно Define Attributes для ввода характеристик атрибута.
Должны отредактировать атрибут, выберите данный атрибут из списка, внесите необходимые изменения.
Нажмите ОК, чтобы закрыть окно диалога.
Создание отношений
С оздание отношения между сущностями
Д ля создания отношения:
Выберите в меню Create | Relationship или значок
на панели инструментов IDEF1X.Курсор превратится в указатель отношения:
Щёлкните внутри первой сущности около правой границы и переместите курсор внутрь другой сущности:
Щёлкните мышкой.
Появится окно диалога Define Relationship:
В окне диалога перечислены сущности, между которыми существует отношение. Окно включает поля Relationship (Имя отношения), Inverse (Имя обратного отношения) (и переключатель, если вы хотите, чтобы оба названия появились на диаграмме на разных строчках), Definition (Определение), Relationship Type (Тип отношения) и Relationship Cardinality (Мощность отношения).
Заполните поля и кликните на кнопке «ОК»
Между сущностями появится стрелка, изображающая сущность. Рядом с ней помещена метка (название отношения).
Создадим отношения в нашем примере
Определим два отношения: одно не идентифицирующее отношение между сущностями Заказчик и Заказ и одно не определённое отношение между сущностями Заказ и Продукт.
Создание отношения между сущностями Заказчик и Заказ
В отношении между Заказчик и Заказ сущность Заказчик является сущностью родителем. Это отношение – не идентифицирующее. (В соответствии с правилами моделирования данных, отношение не может быть идентифицирующим, так как сущность Заказчик не имеет атрибутов первичного ключа. Design/IDEF понимает это правило и не позволяет его нарушать). Мощность отношения равна ноль, один или много.
Соединим стрелкой сущности Заказчик и Заказ
Заполним поля диалога следующей информацией
Поле |
Значение |
Relationship |
размещает |
Definition |
Термин «размещает» подразумевает, что компания PS получает заказы в письменном виде. Если заказчик делает заказ по телефону, он должен подтвердить свой заказ письменно по факсу или по почте. |
Type |
Non-Identifying |
Cardinality (мощность) |
Zero, One or Many. |
Между сущностями Заказчик и Заказ появится стрелка, изображающая сущность. Она нарисована пунктирной линией (для не идентифицирующего отношения), рядом с ней помещена метка (название отношения) “размещает ”.
Создание отношения между сущностями Заказ и Продукт
Отношение между Заказ и Продукт является не определенным
Соединим стрелкой сущности Заказ и Продукт
Заполним поля диалога следующей информацией
Поле |
Значение |
Relationship |
содержит заказ на |
Inverse |
заказывается в |
Type |
Non-Specific |
Вы можете поставить флажок напротив Separate Line (Отдельные строки), чтобы оба названия отношения появились на разных строчках.
Как только вы поставите флажок напротив Non-Specific, параметр Relationship Cardinality (Мощность) станет недоступным.
Теперь наша модель должна содержать следующую информацию:
2.3Изменение и расширение модели
Открытие статей глоссария для объектов IDEF1X
При создании на предыдущих шагах сущностей и отношений, вводимая вами информация становилась статьями глоссария.
В этой и следующих главах вам понадобится находить и открывать некоторые статьи глоссария для сущностей, отношений, атрибутов и т.п. Для того, чтобы найти и открыть статью глоссария, вы можете:
Дважды щёлкнуть на объекте диаграммы.
Выделить объект на диаграмме, затем выбрать в меню Glossary | Glossary Entry.
Выбрать из меню Glossary | Glossary Browser, затем выбрать из списка желаемый объект. Браузер глоссария содержит список объектов модели, распределённых по категориям: сущности, атрибуты, ролевые имена и отношения.
Перейти в Браузере на вкладку Glossary. Список содержит объекты модели, распределённые по категориям. Выделите желаемый объект на кнопку Edit….
Рассмотрим возможности редактирования модели на нашем примере.
Предположим, что мы получили дополнительные сведения от персонала компании PS и внесем на основе этой новой информации изменения в модель. Эти изменения включают в себя:
Добавление к сущности атрибута первичного ключа.
Разрешение не определённого отношения путём создания новой сущности.
Добавление к сущности дискриминатора и создание сущностей-категорий.
Изменённая и новая информация
Во время второй встречи персонал компании PS внёс изменения в сообщённую им ранее информацию:
Заказчик на самом деле имеет уникальный идентификатор, номер заказчика. Отношение между сущностями ЗАКАЗЧИК и ЗАКАЗ остаётся не идентифицирующим, как уже было показано в модели.
Также персонал предоставил вам немного новой информации:
Не определённое отношение между сущностями ЗАКАЗ и ПРОДУКТ следует разрешить при помощи дополнительной сущности.
Сущность ЗАКАЗ-НА-ПРОДУКТ должна иметь дискриминатор под названием платформа, который различает три категории: Macintosh, PC и UNIX.
Добавление атрибутов первичного ключа сущности ЗАКАЗЧИК
Для того, чтобы добавить атрибуты первичного ключа, необходимо открыть статью глоссария для сущности.
Откроем для сущности ЗАКАЗЧИК статью глоссария
Добавим атрибут используя следующую информацию
Name |
Definition |
Type |
Data Type |
Length |
номер заказчика |
Уникальный номер, присваиваемый в базе данных каждому заказчику |
Primary |
CHAR |
12 |
По словам персонала компании PS, номер заказчика может включать кроме чисел ещё и букву в начале.
Теперь первичный ключ сущности ЗАКАЗЧИК мигрирует к сущности ЗАКАЗ. Мигрирующий атрибут попадает в список атрибутов, не относящихся к первичному ключу сущности ЗАКАЗ, так как между сущностями ЗАКАЗЧИК и ЗАКАЗ не идентифицирующее отношение. Наша модель будет иметь следующий вид:
Замена неопределенного отношения между сущностями ЗАКАЗ и ПРОДУКТ
Разрешение неопределённого отношения между сущностями ЗАКАЗ и ПРОДУКТ осуществляется поэтапно:
Создание дополнительной искусственной сущности, в данном случае ЗАКАЗ-НА-ПРОДУКТ.
Удаление существующего отношения между сущностями ЗАКАЗ и ПРОДУКТ.
Установление двух идентифицирующих отношений между этими двумя сущностями и новой искусственной сущностью.
Э тап 1. Создаем искусственную сущность, в данном случае ЗАКАЗ-НА-ПРОДУКТ, помещая ее примерно между сущностями ЗАКАЗ и ПРОДУКТ и используя следующие данные:
Name |
Definition |
Заказ на продукт |
Эта искусственная сущность содержит информацию о продукте (продуктах) компании PS, которые заказал заказчик |
Добавим атрибут:
Name |
Definition |
Type |
Data Type |
количество продукта |
Число заказанных копий продукта |
Non-Primary |
INTEGER |
Э тап 2. Удалим отношение между сущностями ЗАКАЗ и ПРОДУКТ:
Э тап 3. Создадим отношение между сущностями ЗАКАЗ и ЗАКАЗ-НА-ПРОДУКТ используя следующие данные:
Поле |
Значение |
Relationship |
содержит |
Definition |
Информация о количестве заказанного продукта |
Type |
Identifying |
Cardinality (мощность) |
One or Many |
Сущность ЗАКАЗ-НА-ПРОДУКТ становится зависимой сущностью с внешним ключом – мигрирующим атрибутом первичного ключа сущности ЗАКАЗ (номер-заказа). Дополнительно на экране появилась буква P, показывающая, что мощность отношения Один или Много. Теперь мы можем создать отношение между сущностями ПРОДУКТ и ЗАКАЗ-НА-ПРОДУКТ.
Аналогично создадим отношение между сущностями ПРОДУКТ и ЗАКАЗ-НА-ПРОДУКТ:
Поле |
Значение |
Relationship |
является частью |
Definition |
Информация об особенностях заказанного продукта |
Type |
Identifying |
Cardinality (мощность) |
One or Many |
Обратите внимание, что атрибут наименование-продукта (атрибут первичного ключа сущности ПРОДУКТ) стал другим внешним ключом в списке атрибутов первичного ключа сущности ЗАКАЗ-НА-ПРОДУКТ.
Создание дискриминатора и сущностей-категорий
Нам необходимо создать три сущности для трёх платформ (MAC, PC и UNIX). Для этого:
Добавим к сущности ЗАКАЗ-НА-ПРОДУКТ дискриминатор.
Создадим три сущности.
Сделаем сущности MAC, PC и UNIX категориями сущности ЗАКАЗ-НА-ПРОДУКТ.
Ш аг 1: Создание дискриминатора
Д ля того, чтобы создать дискриминатор:
Откроем статью глоссария для сущности ЗАКАЗ-НА-ПРОДУКТ.
Добавим атрибут со следующими параметрами:
Name |
2.3.1.1Definition |
Type |
Data Type |
Length |
платформа |
Платформа, для которой делается заказ |
Discriminator |
CHAR |
6 |
На диаграмме появился дискриминатор полного кластера категорий.
Ш аг 2: Создание сущностей-категорий
При создании сущности категории выполняются те же этапы, что и при создании любой другой сущности. (Сущность не является категорией, пока вы не создадите отношение.)
Создадим сущности-категории, используя приведённую ниже информацию и соответствующую иллюстрацию.
Сущность |
Определение |
Характеристики атрибутов |
MAC |
Версия продукта для Macintosh |
(Нет) |
PC |
Версия продукта для РС |
Name: размер диска Type: Non-Primary Definition: Размер диска для РС, который заказал заказчик. Data Type: INTEGER |
UNIX |
Версия продукта для UNIX |
Name: носитель Type: Non-Primary Definition: Тип носителя Data Type: CHAR Length: 8 |
Ш аг 3: Объявление сущностей категориями
Д ля того, чтобы присоединить категории к дискриминатору:
Для того, чтобы объявить сущности MAC, PC и UNIX категориями сущности ЗАКАЗ-НА-ПРОДУКТ, надо создать отношения между каждой сущностью-категорией и общей сущностью. Мы не будем пользоваться окном диалога Define Relationship, так как заранее предполагаем характер отношения.
Выберем в меню Create | Relationship.
Начиная с нижней части значка дискриминатора нарисуем стрелки к меткам каждой из будущих сущностей-категорий MAC, PC и UNIX.
Теперь каждая из присоединенных сущностей имеет закругленные края, как зависимая сущность, и содержит соответствующий внешний ключ.
2.4Улучшение внешнего вида модели
Обзор
Design/IDEF предлагает различные инструменты для улучшения внешнего вида модели. В этой главе описаны некоторые из них. Вы будете их использовать в своей учебной модели. После того, как вы внесёте изменения в учебную модель, вы сможете улучшить внешний вид модели, созданной в предыдущих главах.
Редактирование модели
П еремещение сущностей и меток
Д ля того, чтобы переместить сущность или метку:
Щёлкните на изображении объекта, чтобы выделить её.
Щёлкните кнопкой мыши и перетащите объект в другое место.
Р азмещение сущностей в один ряд
Если вы хотите сразу же изменить два и более объектов, вы должны их выделить. Здесь мы описываем способ выделения нескольких объектов с помощью кнопки Shift. За дополнительной информацией о других методах обратитесь к функции Help Design/IDEF’а.
При выделении нескольких объектов:
Каждый выделенный объект отмечен серым или красным цветом.
Объекты остаются выделенными, пока вы не отмените выделение, щёлкнув вне этих объектов.
Д ля того, чтобы разместить сущности в один ряд:
Выделите сущности:
Щёлкните один раз на изображении первой сущности, которую вы хотите выделить.
Нажмите кнопку Shift и, оставляя её нажатой, щёлкните один раз на следующих сущностях.
Не отпуская Shift щёлкните на сущности, чтобы сделать её объектом ссылки и выровнять относительно неё другие сущности.
Выберите из меню Modify | Align пункт Top to Top (Вершина к вершине).
Щёлкните вне выделенных объектов.
Теперь сущности разместились в один ряд, но расстояния между отдельными сущностями не одинаковы. Для выравнивания расстояния используется команда Spread.
Р азмещение сущностей на одинаковом расстоянии друг от друга
Д ля того, чтобы поместить сущности на одинаковом расстоянии друг от друга:
Выделите сущности.
Выберите из меню Modify | Spread пункт Spread Horizontal.
Щёлкните вне выделенных объектов, чтобы отменить выделение.
Редактирование стрелок отношений
Перед тем, как приступить к редактированию стрелки отношения, вы должны ознакомиться с рукоятками.
Рукоятки стрелки
Вы будете использовать рукоятки стрелки при редактировании траектории стрелки. Для того, чтобы на экране появились рукоятки, вы должны выделить стрелку. Когда вы хотите изменить:
Длину сегмента стрелки, используйте одну из рукояток, которые формируют угол сегмента.
Место присоединения стрелки к сущности, используйте рукоятку, которая присоединена к сущности.
2.5Изучение других свойств idef1x
Редактирование отношений
Открытие статьи глоссария отношения
Вы редактируете информацию об отношении так же, как и информацию о сущностях – открывая статью глоссария. Вы можете найти и открыть статью глоссария несколькими способами:
Выделить стрелку отношения, а затем дважды щёлкнуть на ней.
Выделить отношение, затем выбрать в меню Glossary | Glossary Entry.
Выбрать в меню Glossary | Glossary Browser.
Изменение типа отношения
Д ля того, чтобы идентифицирующее отношение сделать не идентифицирующим, и наоборот, вы можете воспользоваться одним из следующих способов:
Выделить стрелку отношения, затем выбрать в меню Create | Toggle Relationship.
Использовать на панели инструментов IDEF1X кнопку
Открыть статью глоссария отношения и поставить другой флажок в разделе Type.
Изменение отношения
И змените отношение между сущностями ЗАКАЗ и ЗАКАЗ-НА-ПРОДУКТ с идентифицирующего на не идентифицирующее, используя опцию меню Create | Toggle Relationship.
Изменение т ипа дискриминатора
Д ля того, чтобы дискриминатор полного кластера категорий превратить в дискриминатор неполного кластера категорий:
Выделите значок дискриминатора.
Выберите в меню Create | Toggle Discriminator или нажмите на панели инструментов кнопку
В модели нашего примера значок дискриминатора платформа показывает, что кластер категорий сущности Заказ-на-продукт полон. Предположим, что существуют и другие поддерживаемые платформы, следовательно наш кластер категорий не является полным, поэтому:
Д авайте покажем, что кластер категорий не полный.
Выделим значок дискриминатора платформа.
Выберем в меню Create | Toggle Discriminator.
Теперь значок дискриминатора содержит не две горизонтальные линии, а одну.
Определение:
Ролевое имя
Ролевое имя – это имя, присваиваемое атрибуту внешнего ключа сущности. Вы можете присваивать ролевое имя атрибуту внешнего ключа или группе атрибутов внешнего ключа для упрощения модели.
Создание ролевых имён
В этом упражнении вы будете дважды назначать ролевые имена: первый раз отдельному атрибуту, второй раз группе атрибутов.
Предположим, что при создании сущности заказ атрибут номер-заказа был-бы назван просто номер.
Такое название очевидно для сущности заказ но в сущности заказ-на-продукт становиться не совсем непонятен смысл этого внешнего ключа, а для сущностей-категорий MAC, PC и UNIX смысл полностью теряется.
О пределим ролевое имя для атрибута номер:
Откроем статью глоссария для сущности заказ-на-продукт.
Перейдем на вкладку Define Attributes и выделим атрибут номер-заказа.
В поле Role Name введем “заказ”.
Нажмите ОК, чтобы закрыть окно диалога.
Обратите внимание, что теперь сущность заказ-на-продукт содержит новое ролевое имя атрибута, которое в сущностях-категориях заменило сам атрибут номер-заказа.
Создание ролевых имён для группы атрибутов
Теперь вы можете определить ролевое имя для группы атрибутов.
Создайте в сущности ЗАКАЗ три атрибута первичного ключа (dd, mm и yyyy). (Это не обычный пример данных, которые вы можете обнаружить в реальной модели, но это простой и доходчивый способ объяснения процедуры создания и преимуществ ролевого имени). Вместе эти три атрибута образуют дату (день, месяц и год).
Мы оставим эти атрибуты в неприкосновенности для сущности ЗАКАЗ, но упростим их для сущности ЗАКАЗ-НА-ПРОДУКТ.
Д ля того, чтобы определить ролевое имя:
Откройте статью глоссария для сущности ЗАКАЗ-НА-ПРОДУКТ.
Выделите атрибут dd, перейдите в диалог Define Attributes.
В поле Role Name введите “date” (дата) и нажмите кнопку OK .
Повторите шаг 3 для атрибутов mm и yyyy..
Нажмите ОК, чтобы закрыть окно диалога.
Обратите внимание (как показано ниже), что теперь сущность ЗАКАЗ-НА-ПРОДУКТ содержит новое ролевое имя атрибута, и это ролевое имя заменило три отдельных атрибута внешнего ключа в сущностях MAC, PC и UNIX.
1 Первичный ключ – ключ, используемый системой для идентификации объекта.
