Рассмотрим эти таблицы подробнее. В таблице пациенты мы введём первичный ключ – код пациента, таким образом, мы гарантируем, что в этой таблице не будет дублирующихся записей. Все атрибуты этой таблицы атомарные (атрибут Ф.И.О. будем считать атомарным, т.к. нам не требуется производить отдельные действия с именами или отчествами пациентов). Исходя из приведенного выше определения, можно утверждать, что эта таблица находится в первой нормальной форме. Аналогично, введя первичный ключ – код лекарства в таблице «Лекарства», мы утверждаем, что она находится в первой нормальной форме. Для того чтобы исключить дублирующиеся записи в третьей таблице, мы введём составной первичный ключ (т.к. ни один атрибут не может быть уникальным для каждой записи) – STR (код пациента) + ”-” + STR (код лекарства) + DTOC (начало лечения). Атрибут начало лечения пришлось включить потому, что врач может повторно выписать тоже лекарство тому же пациенту (например, в случае рецидива болезни), если при этом пациент ещё не выписался. Если бы пациент успел выписаться и пришёл повторно за тем же лекарством, то его бы внесли в таблицу с новым кодом пациента. Так как значением ключа является строка, то нам пришлось ввести символ разделитель “-”, иначе у нас возможны ситуации когда, например, пациент с кодом 1 получает лекарство с кодом 12 (значение ключа ”121”+”дата”) и пациент с кодом 12 получает лекарство с кодом 1 в тот же день (значение ключа ”121”+”дата”). Следовательно, мы так можем потерять уникальность ключа.
Также в этой таблице присутствует вычисляемый или составной атрибут - количество израсходованного лекарства = (конец лечения – начало лечения+1)/количество приёмов в день, где количество приёмов будем рассматривать как дневную дозу. Поэтому мы не будем вносить этот атрибут в таблицу, а будем вычислять его при создании отчёта для конкретного пациента.
Теперь все наши таблицы находятся в первой нормальной форме и выглядят следующим образом:
1. Пациенты (код пациента, Ф.И.О., палата, отделение).
2. Лекарства (код лекарства, название лекарства, способ применения, цена).
3. Пациенты-Медикаменты (код пациента, код лекарства, начало лечения, конец лечения, дневная доза).
Приводимые в дальнейшем определения будут даваться для таблиц, имеющих один ключ.
«Определение для второй нормальной формы - отношение R находится во второй нормальной форме в том и только в том случае, когда находится в первой нормальной форме, и каждый неключевой атрибут полностью функционально зависит от первичного ключа». [3] Под функциональной зависимостью понимается ситуация, когда «в отношении R атрибут Y функционально зависит от атрибута X (X и Y могут быть составными) в том и только в том случае, если каждому значению X соответствует в точности одно значение Y: R.X (r) R.Y.
Функциональная зависимость R.X (r) R.Y называется полной, если атрибут Y не зависит функционально от любого точного подмножества X». [3]
Приведём виды функциональной зависимости в первой таблице:
· Код пациента -> Ф.И.О.
· Код пациента -> палата
· Код пациента -> отделение
То есть эта таблица находится во второй нормальной форме.
Функциональные зависимости во второй таблице:
· Код лекарства - > название лекарства
· Код лекарства - > способ применения
Но цена не имеет функциональной зависимости от кода лекарства, т.к. одно и тоже лекарство могло поступить в разное время и по разной цене. Поэтому одному и тому же коду лекарства может соответствовать несколько значений цен и при этом код лекарства не сможет являться первичным ключом. Для того чтобы исправить такое положение вещей мы введём дополнительную таблицу «Цены» (код лекарства, цена, дата поставки) введём в ней составной первичный ключ STR (код лекарства) + DTOC (дата поставки). Теперь обе таблицы находятся во второй нормальной форме.
Функциональные зависимости в третьей таблице:
· STR (код пациента) + ”-” + STR (код лекарства) + DTOC (начало лечения) - > дневная доза
· STR (код пациента) + ”-” + STR (код лекарства) + DTOC (начало лечения) - > конец лечения
Атрибут конец лечения заносится врачом заранее при выписывании лекарства.
После привидения ко второй нормальной форме наша база данных приняла следующий вид:
1. Пациенты (код пациента, Ф.И.О., палата, отделение).
2. Лекарства (код лекарства, название лекарства, способ применения).
3. Пациенты-Медикаменты (код пациента, код лекарства, начало лечения, конец лечения, дневная доза).
4. Цены (код лекарства, цена, дата поставки).
«Определение для третьей нормальной формы - отношение R находится в третьей нормальной форме в том и только в том случае, если находится во второй нормальной форме и каждый неключевой атрибут нетранзитивно зависит от первичного ключа. Функциональная зависимость R.X -> R.Y называется транзитивной, если существует такой атрибут Z, что имеются функциональные зависимости R.X -> R.Z и R.Z -> R.Y и отсутствует функциональная зависимость R.Z --> R.X. (при отсутствии последнего требования мы имели бы "неинтересные" транзитивные зависимости в любом отношении, обладающем несколькими ключами.)». [3]
В данной базе предполагается, что номера палатидут непрерывно, т.е., например, палаты 1-4 принадлежат одному отделению, а палаты 5-8 – другому ( или другими словами в разных отделениях нет палат с одинаковыми номерами).
Исходя из этого условия можно определить следующий вид транзитивной зависимости для первой таблицы:
· Код пациента -> палата
· Палата -> отделение
· Код пациента -> отделение
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.