
методичка БД_иннов_ПО
.pdf
5) Выполнить генерацию
Проблемы ER-моделирования
Существуют проблемы, которые принято называть дефектами соединения (connection trap). Они обычно возникают «вследствие неправильной интерпретации смысла некоторых связей». Рассмотрим два основных типа дефектов соединения: дефект типа "разветвление" (fan trap) и дефект типа "разрыв" (chasm trap), а также способы их выявления и устранения в создаваемых ЕR-моделях. В общем случае для выявления дефектов соединения необходимо убедиться в том, что смысл каждой связи определен четко и ясно. При недостаточном понимании сути установленных связей может быть создана модель, которая не будет являться истинным представлением реального мира.
Дефекты типа "разветвление"
Дефект типа "разветвление" имеет место в том случае, когда модель отображает связь между типами сущностей, но путь между отдельными сущностями этого типа определен неоднозначно.
Дефект типа "разветвление" возникает в том случае, когда две или несколько связей типа 1:* исходят из одной сущности. Потенциальный дефект типа ''разветвление" показан на
21

рис. 9, на котором две связи типа 1:* (Has и Operates) исходят из одной и той же сущности
Division.
Staff |
|
Has |
Division |
|
|
Branch |
|
|
|
|
|
||||
1.. * |
1.. 1 |
1.. 1 |
1.. * |
||||
|
|
|
|||||
|
|
|
|
|
|
|
Рис. 9. Пример дефекта типа "разветвление"
На основании этой модели можно сделать вывод, что один отдел (Division) может состоять из нескольких отделений компании (Branch) и в нем может работать многочисленный штат сотрудников. Проблемы начинаются при попытках выяснить, в каком отделении компании работает каждый из сотрудников отдела.
Неспособность дать точный ответ на поставленный вопрос является результатом дефекта типа «разветвление», связанного с неправильной интерпретацией связей между сущностями Staff, Division и Branch. Устранить эту проблему можно путем перестройки ERмодели для представления правильного взаимодействия этих сущностей таким образом, как показано на рис. 10.
Division |
|
O |
Branch |
|
H |
Staff |
|
1.. 1 |
1.. * |
1.. 1 |
1.. * |
||||
|
|
|
|||||
|
|
|
|
|
|
|
Устранить дефект типа
Рис. 10. Пример переработки ER-модели с целью устранения дефекта типа "разветвление"
Если проверить эту структуру на уровне отдельных связей Operates к Has, можно убедиться, что теперь легко дать однозначный ответ на поставленный выше вопрос.
Дефекты типа "разрыв"
Дефект типа «разрыв» появляется в том случае, когда в модели предполагается наличие связи между типами сущностей, но не существует пути между отдельными сущностями этих типов.
Дефект типа "разрыв" может возникать, если существует одна или несколько связей с минимальной кратностью, равной нулю (которая обозначает необязательное участие), и эти связи составляют часть пути между взаимосвязанными сущностями. На рис. 11 потенциальный дефект типа "разрыв" показан на примере связей между сущностями Branch, Staff и PropertyForRent.
Рассмотрев эту модель, можно сделать вывод, что одно отделение компании имеет много сотрудников, которые работают со сдаваемыми в аренду объектами. Однако не все сотрудники непосредственно работают с объектами и не все сдаваемые в аренду объекты недвижимости в каждый конкретный момент находятся в ведении кого-либо из сотрудников компании. В данном случае проблема возникает, когда необходимо выяснить, какие объекты недвижимости приписаны к тому или иному отделению компании.
Branch |
|
H |
Staff |
|
O |
PropertyForRent |
|
1.. 1 |
1.. * |
|
0.. 1 |
0.. * |
|
|
|
|
|
|
|
|
Рис. 11. Пример дефекта типа "разрыв"
22

Попробуем ответить на следующий вопрос: "Какое отделение компании отвечает за работу с объектом под номером 'РА14'? К сожалению, на данный вопрос нельзя дать ответ, если этот объект в текущий момент не связан ни с одним из сотрудников, работающих в каком-либо из отделений компании. Неспособность дать ответ на заданный вопрос рассматривается как утрата информации (поскольку известно, что любой объект недвижимости должен быть приписан к какому-то отделению компании) в результате которой и возникает дефект типа "разрыв". Кратность сущности Staff и PropertyForRent в связи Oversees имеет минимальное значение, равное нулю, а это означает, что некоторые объекты недвижимости не могут быть связаны с отделением компании с помощью информации о сотрудниках. Поэтому для разрешения этой проблемы следует ввести недостающую связь Offers между сущностями Branch и PropertyForRent. ER-модель, показанная на рис. 12, отображает истинные связи между этими сущностями. Такая структура гарантирует, что всегда будут известны объекты недвижимости, связанные с каждым отделением компании, включая объекты недвижимости которые в данный момент не поручены никому из сотрудников этой компаний.
Branch |
|
H |
Staff |
|
O |
PropertyForRent |
||
|
|
1.. 1 |
1.. * |
|
0.. 1 |
0.. * |
|
|
|
|
|
|
|
|
|
|
|
1.. 1 |
|
|
|
|
|
|
|
1.. * |
|
|
|
|
Offers |
|
|
|
|
|
|
|
|
|
|
|
|
|
Введение связи Offers позволяет устранить дефект типа «разрыв»
Рис. 12. ER-модель, представленная на рис.11, после переработки с целью устранения дефекта типа "разрыв"
Используя полученные теоретические знания и модели, построенные в предыдущих лабораторных работах, выполним задание.
Поставщик/9 Ключ поставщика
Название
Адрес
ИНН Расч. счет
Контактное лицо
Корм/8 Ключ корма
Наименолвание
Ключ поставщика (FK)
Местожительство/6 Ключ местожительства
Корпус Номер клетки
Должность/1 Ключ должности
Наименование
Служащий/2 Ключ служащего
ФИО Дата рождения
Пол Дата приема Дата увольнения Зар. плата
Ключ должности (FK)
Класс/11 Ключ класса
Название
|
|
С кем |
|
|
Вид/10 |
Совместимость/12 |
|
|
Ключ вида |
||
|
Ключ совместимости |
||
Рацион/7 |
Название |
||
|
|||
Ключ рациона |
С кем (FK) |
||
Ключ класса (FK) |
|||
Количество |
|
Кто (FK) |
|
|
|
||
Ключ животного (FK) |
|
Кто |
Ключ корма (FK)
|
Прививка/5 |
|
|
Ключ прививки |
|
|
Название |
|
Животное/3 |
Сведения о привиках/4 |
|
Ключ животного |
||
Ключ свед. о прививке |
||
|
||
Кличка |
Дата |
|
Рост |
||
Доза |
||
Вес |
||
Ключ животного (FK) |
||
Теплолюбивость |
||
Ключ прививки (FK) |
||
Ключ местожительства (FK) |
||
|
||
Ключ вида (FK) |
|
|
Потомство |
|
Рис. 13. Логическая модель, описывающая зоопарк
23

Post |
Klass |
|
|
PK_Post: AutoNumber |
PK_Klass: AutoNumber |
|
|
Naz: Text(25) |
Naz: Text(15) |
|
|
Adres: Text(150) |
|
|
|
INN: Text(12) |
|
|
|
RS: Text(100) |
|
|
|
FIO: Text(45) |
|
|
|
Korm |
|
|
|
PK_Korm: AutoNumber |
|
|
|
Naim: Text(25) |
Vid |
Sovm |
|
PK_Post: Long Integer |
PK_Vid: AutoNumber |
||
PK_Sovm: AutoNumber |
|||
Rasion |
Naz: Text(15) |
||
|
|||
PK_Ras: AutoNumber |
PK_Vid_Kto: Long Integer |
||
PK_Klass: Long Integer |
|||
|
PK_Vid_Skm: Long Integer |
||
Kol: Double |
|
||
|
|
||
PK_Zver: Long Integer |
|
|
|
PK_Korm: Long Integer |
|
|
Mestog |
|
|
|
PK_Mesto: AutoNumber |
|
|
|
Korp: Text(10) |
|
Privivki |
|
|
PK_Priv: AutoNumber |
||
Nomer: Long Integer |
|
||
|
|
||
|
|
Nazv: Text(20) |
|
Dolg |
|
|
|
PK_Dolg: AutoNumber |
|
|
|
Naim: Text(15) |
|
|
|
|
Zveri |
Sved |
|
Slug |
PK_Zver: AutoNumber |
||
PK_Sved: AutoNumber |
|||
PK_Slug: AutoNumber |
|
||
Klichka: Text(15) |
|
||
|
Data: Date/Time |
||
FIO: Text(45) |
Rost: Long Integer |
||
Doza: Double |
|||
Drogd: Date/Time |
Ves: Double |
||
PK_Zver: Long Integer |
|||
Pol: Text(1) |
Teplolub: Text(1) |
||
PK_Priv: Long Integer |
|||
Priem: Date/Time |
PK_Mesto: Long Integer |
||
|
|||
Uvoln: Date/Time |
PK_Vid: Long Integer |
|
|
Zpl: Double |
|
|
|
PK_Dolg: Long Integer |
|
|
|
Podopech |
Potom |
|
|
|
|
||
PK_Slug: Long Integer |
PK_Zver: Long Integer |
|
|
PK_Zver_R: Long Integer |
|
||
PK_Zver: Long Integer |
|
||
|
|
||
|
Rodst: Text(4) |
|
Рис. 14.Физическая модель, описывающая зоопарк
Контрольные вопросы:
1.Как называются объекты в IDEF1 диаграммах?
2.Какие виды сущностей вы знаете?
3.В чем заключается отличие идентифицирующей связи от неидентифицирующей? Как они обозначаются на диаграммах?
4.Для чего используются CASE-средства проектирвоания?
5.Что представляет собой масштабирование в Toad Data Modeler Freeware?
6.Назовите уровни отображения модели в Toad Data Modeler Freeware.
7.Перечислите основные компоненты диаграммы Toad Data Modeler Freeware.
8.Как указать мощность и имя связи в Toad Data Modeler Freeware?
9.Для чего используются триггеры?
10.Где задаются правила ссылочной целостности в Toad Data Modeler Freeware?
11.Как выбирают установки для реализации ссылочной целостности?
12.Как реализована связь *:* в моделях Toad Data Modeler Freeware?
13.Какие ключи существуют в моделях Toad Data Modeler Freeware? В чем их отличительные особенности?
14.Как создать физическую модель в Toad Data Modeler Freeware?
3.5 Лабораторная работа №5
Задание:
На основе скрипта, сгенерированного в предыдущей лабораторной работе, создать Базу данных в среде MS Access, проверить значения на уровне полей и задать значения полей по умолчанию. Организовать выбор данных из справочных таблиц.
24

Теоретический материал
Алгоритм создания базы данных из файла, сгенерированного в Toad Data Modeler Freeware описан непосредственно в скрипте.
1.Create a new database in the MS Access 2000
Создадим новую базу данных.
2.Create a new module
Создадим модуль в базе данных.
3.Copy this SQL script output into the new MS Access 2000 module
Скопируем полученный скрипт в созданный модуль
4.Select from main menu "Tools" item "References..." and check the "Microsoft DAO 3.6 Object Library."
Выберем в главном меню Пункт "Tools" …"References..." и установим необходимую опцию
25

5.Place your mouse cursor somewhere in the main procedure Main()
Установим курсор мыши в начало скрипта
6.Run the module code (Click the "Run Sub/UserForm" button or press F5)
Нажмите клавишу F5.
Закройте модуль, и базу данных с сохранением. Откройте созданную БД снова и вы увидите таблицы.
И связи между ними (Работа с базами данных-Схема данных)
Если вы создаете базу данных непосредственно в MS Access, то для этого используется режим Конструктор.
26

Создание таблиц (в режиме конструктора). Создание базы данных начинается с создания таблиц, в которых и хранится информация о предметной области. База данных обычно включает несколько взаимосвязанных таблиц.
Втабличной форме надо последовательно описать все поля создаваемой таблицы. Сначала задается имя поля. Access допускает задание длинных имен с пробелами на русском языке.
ВMicrosoft Access действуют следующие ограничения на имена полей:
имя должно содержать не более 64 символов;
имя может включать любую комбинацию букв, цифр, пробелов и специальных символов за исключением точки (.), восклицательного знака (!), надстрочного символа (`) и прямых скобок ([ ]);
имя не должно начинаться с символа пробела;
имя не должно включать управляющие символы (с кодами ASCII от 0 до 31). Хотя пробелы внутри имен полей и являются допустимыми, они могут при некоторых
обстоятельствах вызывать конфликты при работе с другими системами. Поэтому их не рекомендуется использовать. Вообще к заданию длинных имен на русском языке надо относиться с осторожностью, особенно, если есть вероятность, что создаваемое приложение будет в дальнейшем использоваться в распределенных гетерогенных системах. При задании имен не допускайте их совпадения с зарезервированными словами. Например, не следует давать полю имя Count, Name и т. п.
Имя поля должно быть уникальным в пределах таблицы. И хотя система не запрещает использование одинаковых имен полей в разных таблицах, избегайте использования одинаковых имен для обозначения разных по смыслу атрибутов. Имя должно быть понятно не только в контексте данной конкретной таблицы. Так, например, если в таблице "СОТРУДНИК" есть поле "Код", и такое же поле есть в таблице "КАФЕДРА", то в первом случае это будет код сотрудника, а во втором - код кафедры. Многие системы (и Access в том числе) автоматически связывают таблицы по полям, которые имеют одинаковые имя, тип и длину. Если имена даны непродуманно, то могут либо возникнуть неправильные связи, либо процесс задания связей будет несколько сложнее, чем при правильном задании имен.
После задания имени надо выбрать тип поля. Если щелкнуть мышкой по свободной ячейке графы "Тип поля", то высветится список допустимых типов полей, из которого и следует выбрать подходящий для описываемого поля тип. Имя и тип поля должны задаваться обязательно. Графа "Описание" может не заполняться. Эта графа используется в целях документирования проекта.
В MS Access допускаются следующие типы данных
Тип данных |
Описание |
Примеры |
|
|
|
|
|
Текстовый |
Числа, буквы, знаки пунктуации и |
Имена, адреса, номера телефонов и |
|
(Text) |
символы, не более 255 (абзац |
описания товаров. Это наиболее |
|
среднего размера) |
распространенный тип данных |
||
|
|||
|
|
|
|
Поле MEMO |
Большие обьемы |
Статьи, заметки, письма, ордера на арест и |
|
(Memo) |
неформатированного текста до 65 |
другие короткие документы |
|
536 символов (среднего размера |
|
||
|
|
||
|
глава в романе) |
|
|
|
|
|
|
Числовой |
Все многообразие числовых |
Любой тип чисел за исключением |
|
(Number) |
данных, включая отрицательные и |
денежных значений. Хранит измерения, |
|
дробные числа |
итоги и проценты |
||
|
|||
|
|
|
|
Денежный |
Аналогичен числовому типу, но |
Цены, платежи и статьи расходов |
|
|
|
|
27

(Currency) |
оптимизирован для хранения сумм |
|
|
в денежном выражении |
|
||
|
|
||
|
|
|
|
Дата/время |
Календарная дата или время суток |
Дни рождений, даты заказов, даты |
|
(Date/Time) |
(или и то и другое). Не применяйте |
доставки, свидания и время наблюдений |
|
этот тип данных для задания |
НЛО |
||
|
|||
|
временных интервалов (количество |
|
|
|
минут в песне или |
|
|
|
продолжительность вашей |
|
|
|
тренировки), для этого больше |
|
|
|
подойдет числовой тип данных |
|
|
|
|
|
|
Логический |
Содержит одно из двух значений: |
Строго двухвариантные поля, как |
|
(Yes/No) |
Да или Нет. (Вы можете их считать |
мужской/женский или |
|
значениями Истина (True) или |
санкционированный/несанкционированный |
||
|
|||
|
Ложь (False)) |
|
|
|
|
|
|
Гиперссылка |
URL (uniform resource locator, |
www.FantasyPets.com, nore- |
|
(Hyperlink) |
унифицированный указатель |
plies@antisocial.co.uk, |
|
информационного ресурса) Web- |
|
||
|
f:\Documents\Report.doc |
||
|
сайта, адрес электронной почты |
||
|
|
||
|
или полное имя файла |
|
|
|
|
|
|
Вложение |
Один или несколько отдельных |
Изображения, документы Word, |
|
(Attachment) |
файлов. Содержимое этих файлов |
электронные таблицы Excel, звуковые |
|
колируется в БД |
файлы и т. д. |
||
|
|||
|
|
|
|
Счетчик |
Хранит число, генерируемое |
Применяется для уникальной |
|
(AutoNumber) |
программой Access при вставке |
идентификации каждой записи, в |
|
новой записи. Каждой записи |
особенности для первичного ключа |
||
|
|||
|
автоматически присваивается |
(primary key) (см. разд. "Первичный ключ" |
|
|
уникальный номер, |
далее в этой главе). Обычно столбец |
|
|
идентифицирующий ее |
называется Код (ID) |
|
|
|
|
|
Поле объекта OLE |
Хранит встроенные двоичные |
Некоторые типы изображений и |
|
(OLE Object) |
данные, соответствующие |
документов, созданных в других |
|
стандарту OLE (Object Linking and |
программах. Главным образом, |
||
|
|||
|
Embedding, применяется для |
применяется в БД Access старого стиля. В |
|
|
обозначения технологий на основе |
наши дни проектировщики БД используют |
|
|
СОМ, используемых для создания |
тип данных Вложение (Attachment) вместо |
|
|
составных документов внедрением |
поля объекта OLE |
|
|
и связыванием) ОС Windows. |
|
|
|
Применяется редко, т. к. приводит |
|
|
|
к быстрому увеличению размера |
|
|
|
БД и другим проблемам. Почти |
|
|
|
всегда лучше выбирать тип данных |
|
|
|
Вложение (Attachment) |
|
|
|
|
|
При определении типа данных поля "Корпус" используем "Мастер подстановок". Для этого можно либо при выборе типа указать "Мастер подстановок" (см. последнюю строку в ниспадающем списке типов полей), либо выбрать позицию "Поле подстановки" в меню "Вставка". Последовательность шагов при создании поля подстановки:
28

1) Выбрать фиксированный список
2) Ввести значения
Для создания поля подстановки, источником для которого служит другая таблица, лучше сначала создавать основную таблицу (данный способ будет описан далее).
Ключи. Каждая реляционная таблица по определению имеет ключ. Access позволяет задавать ключ при описании таблицы, но также разрешает и отказаться от этой возможности. По ключу система автоматически выполняет индексирование, а также проверяет уникальность значений ключа при вводе новых записей или их корректировке. Если Вы собираетесь в качестве ключа выбрать автоматически задаваемый системой код (т. е. поле типа "счетчик"), то можно это поле первоначально не описывать, а подтвердить необходимость его создания при завершении описания таблицы. Access создаст это поле автоматически
В нижней части экрана описания таблицы отображается список свойств выбранного поля. Перечень свойств будет зависеть от выбранного типа поля. В Access многие ограничения целостности могут задаваться при создании таблицы.
Тип поля. Тип поля определяет допустимые символы, которые могут быть использованы при его заполнении. Для некоторых типов полей, например, поля типа <дата>, осуществляется и более сложная проверка. Если допущена ошибка в типе данных или неправильно введена дата, то пользователь должен обязательно исправить ошибку, так как
29
СУБД не дает других возможностей продолжить работу. Многие из свойств полей также позволяют обеспечивать контроль целостности. Такие свойства полей как:
размер поля
формат поля
маска ввода
значение по умолчанию
условия на значения
сообщение об ошибке
обязательное поле
пустые строки
индексированное поле
Поясним использование некоторых из перечисленных выше свойств в целях обеспечения контроля целостности на отдельных примерах.
Размер поля. В поле нельзя ввести больше символов, чем это зафиксировано в свойстве <размер поля> или предопределено типом поля.
Условия на значения. Одной из самых гибких возможностей определения ограничений целостности является задание "Условия на значения". Условия вводятся как выражения. Выражения могут быть простыми или сложными. Используя их можно задавать и диапазоны. Например, условие: >#1.92#, заданное как "Условие на значения" для поля ДАТА в таблице Сведения о прививках , будет означать, что допустим ввод дат только после 1992 года. (Значения-даты необходимо заключать в символы номера (#)). Такое ограничение целостности может быть использовано, например, в случае, если организация, для которой ведется БД, была создана 1 января 1992 года, и все действия были после этой даты. При задании такого ограничения целостности ввод значения в поле будет обязательным (даже если в свойстве поля <Условие на значение> зафиксировано - <нет>).
Условия на значения могут задаваться для полей или записей. Выражения, определяющие условия на значения, не должны содержать функции, определяемые пользователем, статистические функции или функции по подмножеству, функции CurrentUser или Eval, а также ссылки на формы, запросы и таблицы. Кроме того, выражение, указанное в качестве условия для поля, не должно содержать ссылки на другие поля.
Выражение, указанное в качестве условия на значение для записи, может содержать ссылки на поля той же таблицы.
Условия на значения для записей задаются в окне свойств таблицы, вызываемом командой "Свойства" меню "Вид" в режиме конструктора таблицы.
Если пользователь задает значение свойства "Условие на значение", но не определяет свойство "Сообщение об ошибке", то при нарушении условия на значение Microsoft Access выводит стандартное сообщение об ошибке. Если значение свойства "Сообщение об ошибке" задано, то в сообщении об ошибке выводится текст, указанный в качестве значения этого свойства.
В Access нет специального способа задания домена перечислением. Как было показано выше, этого можно достичь, используя "Мастер подстановки". Кроме того, это можно сделать и путем задания соответствующего выражения для свойства Условия на значения. Например, для поля "Пол" в БД Служащий можно задать условие "жен" Or "муж".
Microsoft Access автоматически накладывает условия на значение, определяемые типом данных поля, например, не допускается ввод текста в числовые поля.
Маска ввода. Предположим, Вы вводите в таблицу имена сотрудников. Для соответствующего поля можно задать маску ввода, которая позволит использовать только буквы при вводе, обеспечит преобразование первого символа в верхний регистр, всех остальных - в нижний, и допускающую использование не менее двух букв (считаем, что
30