Для того чтобы привести эту таблицу к третьей нормальной форме мы разобъём её на две таблицы: «Пациенты» (код пациента, Ф.И.О., палата) и «Палаты-Отделения» (палата, отделение). Т.к. число палат обычно много больше числа отделений, то для экономии места на диске мы введём дополнительную таблицу «Коды отделений» (код отделения, отделение), а в таблице «Палаты-Отделения» атрибут отделение заменим кодом отделения. Теперь все эти таблицы находятся в третьей нормальной форме. Остальные таблицы не имеют транзитивных зависимостей. Могут возникнуть сомнения по поводу отношения код лекарства -> название -> лекарства, способ применения, но между названием и способом применения не существует функциональной зависимости – одно и тоже лекарство может иметь несколько способов применения (например, нитроглицерин выпускают в виде таблеток и в ампулах).
После привидения к третьей нормальной форме наша база данных приняла следующий вид:
1. Пациенты (код пациента, Ф.И.О., палата).
2. Лекарства (код лекарства, название лекарства, способ применения).
3. Пациенты-Медикаменты (код пациента, код лекарства, начало лечения, конец лечения, дневная доза).
4. Цены (код лекарства, цена, дата поставки).
5. Палаты-Отделения (палата, код отделения).
6. Коды отделений (код отделения, отделение).
«Определение для третьей усиленной формы Бойса-Кодда - отношение R находится в нормальной форме Бойса-Кодда в том и только в том случае, если каждый детерминант является возможным ключом. Детерминант - любой атрибут, от которого полностью функционально зависит некоторый другой атрибут.» [3]
Из данного определения и структуры таблиц видно, что во всех этих таблицах единственным детерминантом, который не является ключом, будет отделение в таблице «Коды отделений»:
· Отделение - > код отделения
Атрибут отделение является потенциальным ключом для данной таблицы. Отсюда можно сделать вывод, что наша база данных находится в третьей усиленной форме Бойса-Кодда.
Для большинства разрабатываемых приложений третья усиленная форма является конечной стадией нормализации отношений, поэтому мы ею ограничимся.
Для того чтобы установить постоянные отношения между нашими таблицами, мы должны объявить несколько регулярных индексов:
· В таблице Пациенты – палата
· В таблице Пациенты-Медикаменты - код пациента и код лекарства
· В таблице Цены - код лекарства
· В таблице Палаты-Отделения - код отделения
Таким образом, схема отношений после всех декомпозиций будет выглядеть следующим образом:
Структура базы данных:
База данных «Расход медикаментов» включает в себя следующие ключевые файлы:
· Medicines.dbc – файл контейнер базы данных
· Medic.dbf – файл таблицы «Лекарства»
· Patients.dbf – файл таблицы «Пациенты»
· Price.dbf - файл таблицы «Цены»
· Chambers_separations.dbf - файл таблицы «Палаты-Отделения»
· Id_ separations.dbf - файл таблицы «Коды отделений»
· Patients_ medic.dbf – файл таблицы «Пациенты-Медикаменты»
· QueryX.qpr – файлы запросов (где Х =1¸4)
· Form_query.scx – форма для обработки запросов
· Form_report.scx – форма для создания отчётов
· Title.scx – форма заставка
· Report1.frx – шаблон отчёта
· Menu.mpr – программа создания пользовательского меню
· Start.prg – программа настройки окружения базы данных
Для вывода структуры отдельной таблицы воспользуемся командой VFP 5
DISPLAY STRUCTURE
[IN nWorkArea | cTableAlias]
[TO PRINTER [PROMPT] | TO FILE FileName]
[NOCONSOLE]
Таблица Medic.dbf:
Number of data records: 27
Date of last update: 26/05/2002
Code Page: 1251
Field Field Name Type Width Dec Index Collate Nulls
1 I_ID_MEDIC Integer 4 Asc Machine No
2 С_NAME Character 30 Asc Machine No
3 C_WAY Character 20 Asc Machine No
** Total ** 55
Таблица Patients.dbf:
Number of data records: 40
Date of last update: 26/05/2002
Code Page: 1251
Field Field Name Type Width Dec Index Collate Nulls
1 I_ID_MAN Integer 4 Asc Machine No
2 C_NAME Character 35 No
3 I_CHAMBER Integer 4 Asc Machine No
** Total **
Таблица Price.dbf:
Number of data records: 31
Date of last update: 26/05/2002
Code Page: 1251
Field Field Name Type Width Dec Index Collate Nulls
1 I_ID_MEDIC Integer 4 Asc Machine No
2 Y_PRICE Currency 8 4 No
3 D_DATA Date 8 No
** Total ** 21
Таблица Chambers_separations.dbf:
Number of data records: 12
Date of last update: 19/05/2002
Code Page: 1251
Field Field Name Type Width Dec Index Collate Nulls
1 I_CHAMBER Integer 4 Asc Machine No
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.