Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РЕФЕРАТ.docx
Скачиваний:
38
Добавлен:
09.02.2015
Размер:
7.77 Mб
Скачать
  1. Исследовательская часть

3.1. Оптимизация логической схемы бд

3.1.1. Понятие «хорошей» схемы бд

«Хорошая схема» базы данных – это схема БД, которая обладает следующими свойствами:

1) Свойство соединения без потерь:

Если  = (R1, R2,..., Rn) – схема БД, то для любого экземпляра 

 = A = R1 U R2 U … U Rn,

где А – объединение или множество атрибутов предметной области, имеет место следующее выражение:

, (2)

где – проекция экземпляра отношения r на множество атрибутов Ri.

2) Свойство сохранения зависимости:

Если  = (R1, R2,..., Rn) – схема БД и F – множество функциональных зависимостей, то имеет место:

, (3)

где – проекция множества ФЗ на схему отношений.

3) Свойство нахождения в 3НФ.

Любая схема отношения находится в третьей нормальной форме и при этом достигается:

  • отсутствие аномалии избыточности;

  • отсутствие потенциальной противоречивости;

  • отсутствие аномалии включения;

  • отсутствие аномалии удаления.

3.1.2. Алгоритм построения «хорошей» схемы бд

Пусть R = (A1,…An) – универсальная схема отношений,

F – множество функциональных зависимостей на R.

Алгоритм.

  1. Положить = 0 – множество схем отношений, которые образуют схему БД.

  2. Определить G – минимальное покрытие для F.

  3. Каждую зависимость V→W из G заменить на множество атрибутов VW. Получившееся множество схем отношений обозначить через Q.

  4. Если множество атрибутов (A1A2…An) Q, то добавить в схему отношенийR=(A1…An). Выйти из алгоритма. В этом случае «хорошая» схема БД будет состоять только из одной схемы отношений R. Иначе перейти к пункту 5.

  5. Добавить в в качестве схем отношений те одиночные атрибуты, которые не вошли ни в одну из схем изQ.

  6. Добавить в все схемы отношений изQ.

Примечание: после выполнения п. 1-4 или 1-6  обладает свойством сохранения зависимости, и каждая схема отношения находится в 3НФ.

    1. Доказательство «хорошей» схемы бд

Схема БД

 = (поликлиника, отделение, врач, расписание, пациент, направление к врачу, анализ, направление на анализ, лаборатория, результат анализа, процедура, направление на процедуру, процедурный лист, лекарство, рецепт) множество отношений R.

Таблица 3.1.

Таблица «Поликлиника»

Атрибут

Обозначение

ID

Pl1

Name

Pl2

Adress

Phone

Таблица 3.2.

Таблица «Отделение»

Атрибут

Обозначение

ID

О1

ID_hospital

Pl1

Name

O2




Таблица 3.3.

Таблица «Врач»

Атрибут

Обозначение

ID

V1

ID_department

O1

FIO

V2

Specialization

Birthdate

Number

Таблица 3.4.

Таблица «Расписание»

Атрибут

Обозначение

ID

Rs1

ID_doctor

V1

Day

Rs2

Begin

End

Таблица 3.5.

Таблица «Пациент»

Атрибут

Обозначение

ID

Pt1

FIO

Pt2

Birthdate

Polis

Address

BeginDate




Таблица 3.6.

Таблица «Направление к врачу»

Атрибут

Обозначение

ID

Nv1

ID_patient

Pt1

ID_doctor

V1

Date

Nv2

Time

Check

Таблица 3.7.

Таблица «Анализ»

Атрибут

Обозначение

ID

A1

Name

A2

Cabinet

Time

Таблица 3.8.

Атрибут

Обозначение

ID

Na1

ID_analiz

A1

ID_doctor

V1

ID_patient

Pt1

ID_lab

Lb1

Date

Na2

Time

Таблица «Направление на анализ»

Таблица 3.9.

Таблица «Лаборатория»

Атрибут

Обозначение

ID

Lb1

Name

Lb2

Address

Phone

Таблица 3.10.

Таблица «Результат анализа»

Атрибут

Обозначение

ID

Ra1

ID_sending

Na1

Date

Ra2

Result

Таблица 3.11.

Таблица «Процедура»

Атрибут

Обозначение

ID

Pc1

Name

Pc2

Number

Time

Таблица 3.12.

Таблица «Направление на процедуру»

Атрибут

Обозначение

ID

Np1

ID_процедуры

Pc1

ID_врача

V1

ID_пациента

Pt1

Количество

Np2



Таблица 3.13.

Таблица «Процедурный лист»

Атрибут

Обозначение

ID

Pcl1

ID_procedure

Pc1

Date

Pcl2

Time

Check

Таблица 3.14.

Таблица «Лекарство»

Атрибут

Обозначение

ID

Lv1

Name

Lv2

Treatment

BadEffect

Таблица 3.15.

Таблица «Рецепт»

Атрибут

Обозначение

ID

Rt1

ID_treatment

Lv1

ID_doctor

V1

ID_patient

Pt1

Date

Rt2



Предметная область состоит из следующего числа атрибутов:

R = (Pl1, Pl2, O1, O2, V1, V2, Rs1, Rs2, Pt1, Pt2, Nv1, Nv2, A1, A2, Na1, Na2, Lb1, Lb2, Ra1, Ra2, Pc1, Pc2, Np1, Np2, Pcl1, Pcl2, Lv1, Lv2, Rt1, Rt2)

Формальные определения зависимостей, которые наблюдаются в предметной области, с учётом обозначений атрибутов сущностей:

F = {Pl1 → Pl2, O1 → O2P1, V1 → V2O1, Rs1 → Rs2V1, Pt1 → Pt2, Nv1 → Nv2V1Pt1, A1 →A2, Na1 → Na2A1Lb1V1Pt1, Lb1 → Lb2, Ra1 → Ra2Na1Lb1, Pc1 → Pc2, Np1 → Np2Pc1Pt1V1, Pcl1 → Pcl2Np1, Lv1 → Lv2, Rt1 → Rt2Lv1V1Pt1}

Для упрощения процесса вычисления отбросим из F все уникальные функциональные зависимости (в правой части которых нет ключей), получим:

F = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1Pt1, Na1 → A1Lb1V1Pt1, Ra1 → Na1Lb1, Np1 → Pc1V1Pt1, Pcl1 → Np1, Rt1 → Lv1V1Pt1}

  1. Положим схему базы данных, которая образует БД пустой,= 0.

  2. Определяем G - минимальное покрытие для множества функциональных зависимостей F.

    1. Проверяем условие, принадлежит ли данная функциональная зависимость

x→А0 (G - x→A0)+. Если принадлежит, то ее исключаем из множества G.

Для того чтобы убедиться, входит ли зависимость x→А0 (G - x→A0)+ , достаточно построить замыкание множества функциональных зависимостей (G - x→A0)+. В этом случае, если А0 x+, то ее можно исключить из G.

Минимизируем число атрибутов в правой части у каждой функциональной зависимости до 1, то есть каждую зависимость из F заменяем на совокупные, каждая из которых содержит один атрибут в правой части.

G = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

  1. Рассмотрим функциональную зависимость O1 → P1

G – O1 → P1 = {V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Ol+ = Ol, P1Ol+, O1 → P1(G – O1 → P1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость V1 → O1

G - V1 → O1 = {O1 → P1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

V1+ = V1, O1V1+, V1 → O1(G - V1 → O1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Rs1 → V1

G - Rs1 → V1 = {O1 → P1, V1 → O1, Nv1 → V1, Nv1 → Pt, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Rs1+ = Rs1, V1Rs1+, Rs1 → V1(G - Rs1 → V1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Nv1 → V1

G - Nv1 → V1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Nv1+ = Nv1Pt1, V1Nv1+, Nv1 → V1(G - Nv1 → V1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Nv1 → Pt1

G - Nv1 → Pt1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Nv1+ = V1O1P1, Pt1Nv1+, Nv1 → Pt1(G - Nv1 → Pt1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Na1 → A1

G - Na1 → A1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Na1+ = Na1Lb1V1O1P1Pt1, A1Na1+, Na1 → A1( G - Na1 → A1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Na1 → Lb1

G - Na1 → Lb1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Na1+ = Na1V1Pt1O1P1A1, Lb1Na1+, Na1 → Lb1( G - Na1 → Lb1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Na1 → V1

G - Na1 → V1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Na1+ = Na1Pt1A1, V1Na1+, Na1 → V1( G - Na1 → V1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Na1 → Pt1

G - Na1 → Pt1= {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Na1+ = Na1V1O1P1A1, Pt1Na1+, Na1 → Pt1( G - Na1 → Pt1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Ra1 → Na1

G - Ra1 → Na1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Ra1+ = Ra1Lb1, Na1Ra1+, Ra1 → Na1( G - Ra1 → Na1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Ra1 → Lb1

G - Ra1 → Lb1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Ra1+ = Ra1Na1Pt1V1O1P1, Lb1Ra1+, Ra1 → Lb1( G - Ra1 → Lb1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Np1 → Pc1

G - Np1 → Pc1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Np1+ = Np1V1O1P1Pt1, Pc1Np1+, Np1 → Pc1(G - Np1 → Pc1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Np1 → V1

G - Na1 → Ra1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Np1+ = Np1Pt1Pc1, V1Np1+, Np1 → V1( G - Np1 → V1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Np1 → Pt1

G - Np1 → Pt1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Np1+ = Np1V1O1P1Pc1, Pt1Np1+, Np1 → Pt1(G - Np1 → Pt1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Pcl1 → Np1

G - Pcl1 → Np1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

Pcl1+ = Pcl1, Np1Pcl1+, Pcl1 → Np1(G - Pcl1 → Np1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Rt1 → Lv1

G - Rt1 → Lv1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → V1, Rt1 → Pt1}

Rt1+ = Rt1V1O1P1Pt1 Lv1Rt1+, Rt1 → Lv1(G - Rt1 → Lv1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Rt1 → V1

G - Rt1 → V1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → Pt1}

Rt1+ = Rt1Lv1Pt1, V1Rt1+, Rt1 → Lv1( G - Rt1 → Lv1)+

Т.о. данную функциональную зависимость нельзя исключить.

  1. Рассмотрим функциональную зависимость Rt1 → Pt1

G - Rt1 → Pt1 = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → V1, Rt1 → V1}

Rt1+ = Rt1Lv1V1O1P1, Pt1Rt1+, Rt1 → Pt1(G - Rt1 → Pt1)+

Т.о. данную функциональную зависимость нельзя исключить.

    1. Из множества G, полученного при выполнении пункта 2.1., выбираем те функциональные зависимости, у которых в левой части количество символов больше 1. Для нового множества надо проверить условие: для любого z, принадлежащего x (zx), принадлежит ли z атрибуту A, то есть, принадлежит ли данная новая функциональная зависимость z→A множеству G+.

Если выполняется условие z→AG+, то меняем содержимое G, то есть x →A заменяем на z→A. Тем самым выполняется операция попытки уменьшить число атрибутов в левой части функциональных зависимостей.

G = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1, Nv1 → Pt1, Na1 → A1, Na1 → Lb1, Na1 → V1, Na1 → Pt1, Ra1 → Na1, Ra1 → Lb1, Np1 → Pc1, Np1 → V1, Np1 → Pt1, Pcl1 → Np1, Rt1 → Lv1, Rt1 → V1, Rt1 → Pt1}

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

    1. Зависимости с одинаковой левой частью объединим в одну функциональную зависимость. Минимальное покрытие функциональных зависимостей предметной области примет следующий вид:

G = {O1 → P1, V1 → O1, Rs1 → V1, Nv1 → V1Pt1, Na1 → A1Lb1V1Pt1, Ra1 → Na1Lb1, Np1 → Pc1V1Pt1, Pcl1 → Np1, Rt1 → Lv1V1Pt1}

  1. Каждую функциональную зависимость x→A в G’ заменяем на схему отношений типа xA (на множество атрибутов); получившееся множество схем отношений обозначим через Q.

Q = {P1P2, O1P1O2, V1O1V2, Pt1Pt2, Rs1V1Rs2, Nv1V1Pt1Nv2, Na1A1Lb1V1Pt1Na2, Ra1Na1Lb1Ra2, Np1Pc1V1Pt1Np2, Pcl1Np1Pcl2, Rt1Lv1V1Pt1Rt2, Lb1Lb2, Lv1Lv2, Pc1Pc2, A1A2}

  1. Если такая схема отношений A1A2A3 … AnQ, то = A1A2A3 … An и выход из алгоритма. В противном случае переход к шагу 5.

Поскольку такой схемы P1O1P2V1O2Rs1Nv1Na1Np1Rt1V2Pt1Pt2A1A2Ra1Na2Lb1 Lb2Pc1Pcl1Pc2Lv1Rt1Lv2Rs2Nv2Ra2Np2Pcl2Rt2 нет, перейти к шагу 5.

  1. Если в множестве атрибутов R встретился хотя бы один атрибут, который не вошел в любую из схем отношений множества Q, то его добавляем в . Все атрибуты универсальной схемы отношений R вошли хотя бы в одну схему отношений в Q, поэтому  остается без изменений.

  2. ρ = (P1P2, O1P1O2, V1O1V2, Pt1Pt2, Rs1V1Rs2, Nv1V1Pt1Nv2, Na1A1Lb1V1Pt1Na2, Ra1Na1Lb1Ra2, Np1Pc1V1Pt1Np2, Pcl1Np1Pcl2, Rt1Lv1V1Pt1Rt2, Lb1Lb2, Lv1Lv2, Pc1Pc2, A1A2)

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

Таким образом, оптимальная схема БД совпадает с разработанной схемой БД, что и требовалось доказать.