Разработка базы данных «Расход медикаментов», страница 3

Для того чтобы привести эту таблицу к третьей нормальной форме мы разобъём её на две таблицы: «Пациенты» (код пациента, Ф.И.О., палата) и «Палаты-Отделения» (палата, отделение). Т.к. число палат обычно много больше числа отделений, то для экономии места на диске мы введём дополнительную таблицу «Коды отделений» (код отделения, отделение), а в таблице «Палаты-Отделения» атрибут отделение заменим кодом отделения. Теперь все эти таблицы находятся в третьей нормальной форме. Остальные таблицы не имеют транзитивных зависимостей. Могут возникнуть сомнения по поводу отношения код лекарства -> название -> лекарства, способ применения, но между названием и способом применения не существует функциональной зависимости – одно и тоже лекарство может иметь несколько способов применения (например, нитроглицерин выпускают в виде таблеток и в ампулах).

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

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