Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 Нормализация базы данных.  [new]
Monolag
Member

Откуда:
Сообщений: 4
Здравствуйте. Очень прошу помочь мне с нормализацией таблицы, нужно для курсового проекта. Я совершенно запутался в формах нормализации и не уверен: правильно ли применил к БД. Дело в том, что мне сказали, что не может пройти первая и третья нормализация, но при этом не быть второй (как в моем случае). В целом, мне кажется, что я описал шаги нормализации неправильно. Прошу помочь, очень нужно правильно написать эту главу. Финальную модель мне подтвердили, мне просто нужно описать переход от модели до нормализации к модели после нормализации.

Модель до нормализации.
Картинка с другого сайта.

Мое описание:

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

Вторая нормальная форма (?)
Во второй нормализации мы решаем проблему композитных ключей. В существующей модели базы данных нет композитных ключей, а значит, вторая нормализация применена.

Третья нормальная форма
В третьей нормальной форме нам необходимо вынести значения, которые не зависят от ключа. В данной ситуации у нас в таблице "Сотрудник" имеется атрибут "Должность". Должность в данной ситуации определяется номером сотрудника. Для решения данной ситуации мы создаем таблицу, в которой будут отдельно содержаться должности.

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

Модель после нормализации.
Картинка с другого сайта.
22 май 19, 08:51    [21890259]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Тебе все правильно сказали. По определению 3НФ требует 2НФ, а та, в свою очередь требует 1НФ. НФБК формально не требует какой-то другой НФ, но, поскольку можно доказать, что любая НФБК это, в то же время, 3НФ, то все точно так же. Оценивать нормализацию без знания предметки невозможно, т.к. сами по себе ФЗ (функциональные зависимости) это свойство предметной области, а не той или иной модели БД. В общем, найди где-нибудь учебник Дж.Дейта и прочитай соответствующую главу - там, по-моему, очень доступно все изложено.
22 май 19, 09:04    [21890273]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
Monolag
Member

Откуда:
Сообщений: 4
fkthat
Тебе все правильно сказали. По определению 3НФ требует 2НФ, а та, в свою очередь требует 1НФ. НФБК формально не требует какой-то другой НФ, но, поскольку можно доказать, что любая НФБК это, в то же время, 3НФ, то все точно так же. Оценивать нормализацию без знания предметки невозможно, т.к. сами по себе ФЗ (функциональные зависимости) это свойство предметной области, а не той или иной модели БД. В общем, найди где-нибудь учебник Дж.Дейта и прочитай соответствующую главу - там, по-моему, очень доступно все изложено.


Спасибо за ответ, предметная область - информационная система больницы.
Я понял про вторую нормальную форму, постараюсь ее описать. Но скажите пожалуйста, как вы считаете, правильно ли я описал остальные формы?
22 май 19, 09:07    [21890275]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
fkthat
Member

Откуда:
Сообщений: 1163
2НФ это вовсе не композитные ключи, а зависимости между неключевым аттрибутом и другим неключевым аттрибутом. Пример нарушения:

(Человек, Город_Проживания, Страна_Проживания), где первичный ключ это "Человек". Тут есть ФЗ Город_Проживания -> Страна_Проживания, поэтому 2НФ нарушена, исправляем декомпозицией: (Человек, Город_Проживания) + (Город, Страна)
22 май 19, 09:12    [21890279]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
fkthat
Member

Откуда:
Сообщений: 1163
На самом деле я тут херню написал - все что выше это про 3НФ. Давно уже просто эту формалистику не повторял, т.к. на практике оно редко нужно.
22 май 19, 09:15    [21890283]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
ИВП
Member

Откуда:
Сообщений: 220
Где такую терминологию применяют?

2НФ - отсутствуют частичные ФЗ от составного ключа. Если таких зависимостей нет, отношение уже в 2НФ.
3НФ - отсутствуют транзитивные зависимости. Если таких нет, отношение уже в 3НФ.

Чтобы правильно спроектировать, надо выписать все функциональные зависимости.
23 май 19, 21:30    [21892512]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
Monolag
Member

Откуда:
Сообщений: 4
ИВП
Где такую терминологию применяют?

2НФ - отсутствуют частичные ФЗ от составного ключа. Если таких зависимостей нет, отношение уже в 2НФ.
3НФ - отсутствуют транзитивные зависимости. Если таких нет, отношение уже в 3НФ.

Чтобы правильно спроектировать, надо выписать все функциональные зависимости.


Спасибо за ответы. Видимо, мне нужно узнать что такое функциональные и транзитивные зависимости...
Я немного переделал свое описание подобным образом:

Первая нормальная форма


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

Вторая нормальная форма

Во второй нормализации нам необходимо вынести значения, которые не зависят от ключа. В данной ситуации у нас в таблице "Сотрудник" имеется атрибут "Должность". Должность в данной ситуации определяется номером сотрудника. Для решения данной ситуации мы создаем таблицу, в которой будут отдельно содержаться должность

Третья нормальная форма

Нормализация не нужна.

Вопрос: Может быть ситуация, когда первой и второй не соответствует, но после нормализации до второй формы - для достижения третьей формы ничего делать не нужно?
26 май 19, 18:13    [21894201]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Monolag
Видимо, мне нужно узнать что такое функциональные и транзитивные зависимости


Прогулял лекции?
26 май 19, 18:37    [21894215]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48131

Monolag
Может быть ситуация, когда первой и второй не соответствует, но после нормализации до
второй формы - для достижения третьей формы ничего делать не нужно?

Нормальные формы независимы и нарушаться могут независимо.

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

Posted via ActualForum NNTP Server 1.5

26 май 19, 18:42    [21894216]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Dimitry Sibiryakov,

Нет. Само формальное определение любой НФ до 3НФ включительно требует нахождения в "более младшей" НФ. Я выше писал уже об этом.
26 май 19, 18:52    [21894221]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Dimitry Sibiryakov
Вторая форма запрещает иметь поле, которое однозначно вычисляется из других полей этой же
записи.

Снова нет.
Вторая нормальная форма

Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме и каждый неключевой атрибут неприводимо зависит от каждого её потенциального ключа
26 май 19, 18:58    [21894222]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48131

fkthat
Само формальное определение любой НФ до 3НФ включительно требует нахождения в "более
младшей" НФ.

Не совсем. Просто если нарушается "младшая" НФ, становится невозможно строго доказать
соответствие "старшей".

PS: Хитровыподвёрнутые определения из вики это, конечно, хорошо, но они не приблизят ТСа к
пониманию сути вещей.

Posted via ActualForum NNTP Server 1.5

26 май 19, 20:19    [21894245]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Dimitry Sibiryakov
PS: Хитровыподвёрнутые определения из вики это, конечно, хорошо, но они не приблизят ТСа к
пониманию сути вещей.


Вообще-то это "хитровыподвёрнутое определение" из учебника Дейта. Поскольку ТСа волнует именно формальная сторона вопроса (как я понял), то стоит именно формальным определениям и следовать. На практике, конечно, так никто не делает - обычно и так понятно, есть косяки с нормализацией или нет.
26 май 19, 20:37    [21894251]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
mayton
Member

Откуда: loopback
Сообщений: 41808
Тут и Patient и Employee являются персонами. Я-бы на этом сыграл.

Вообще правильно было сказано что нужно глубже знать предметную область и задавать именно
по ней вопросы.

Информации в диаграмме может не хватать.
26 май 19, 20:51    [21894255]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48131

fkthat
обычно и так понятно, есть косяки с нормализацией или нет.

Да нет, как раз на практике-то всё не так просто и нормальность сильно определяется
предметной областью.

Posted via ActualForum NNTP Server 1.5

26 май 19, 21:02    [21894258]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
Monolag
Member

Откуда:
Сообщений: 4
fkthat
Monolag
Видимо, мне нужно узнать что такое функциональные и транзитивные зависимости


Прогулял лекции?


Нормализацию, к сожалению, точно прогулял :)
Собственно, конспект лекций не прояснил ситуацию.
Всем большое спасибо за ответы!
В общем-то, я хотел проверить свою работу по нормализации на правильность, страшно сдавать неправильную работу.
Прочитал подробнее про связи и формы, не стал исправлять последнюю версию, надеюсь, я не ошибся :)
26 май 19, 21:51    [21894273]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4757
Monolag
Вопрос: Может быть ситуация, когда первой и второй не соответствует, но после нормализации до второй формы - для достижения третьей формы ничего делать не нужно?

Может быть ситуация когда первой и второй соответствует, а третьей не соответствует. Но если соответствует третьей, то соответствует второй: третья более сильная, чем вторая.

НФБК более сильная, чем третья. Соответственно, может быть в третьей, но не быть в НФБК. И так дальше: 4 сильнее НФБК, 5 сильнее 4. А ведь есть и 6 как бы, выше которой нет.

Т.е., например НФБК соответствует, но может быть избыточность: не соответствует 4. Правда, все же это уже как бы выглядит как теоретическое изучение всех теоритически возможных избыточностей.

Но на самом деле, есть еще понятие полноты схемы. В частности, там можно навязать схеме все ФЗ с помощью выделения ключей. Вот все в 3НФ могут быть полными. А в НФБК уже нет. Поэтому теория в этом случае не имеет критерия оптимальности: проектировщик стоит перед альтернативой.
28 май 19, 22:56    [21896107]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация базы данных.  [new]
Alex_496
Member [заблокирован]

Откуда: https://www.dvbi.ru
Сообщений: 3869
Monolag,

Пациент сменит фамилию или адрес или имеет несколько адресов и телефонов, то это у Вас будут разные пациенты? А тело, которое лечат, одно и то же.

По одной и той же болезни, точнее диагнозу, один врач назначит один набор лекарств, а другой врач - другие лекарства. И разным пациентам разные дозы.
А лекарства могут отличаться по названиям, но иметь один и тот же базовый ингредиент, или разные упаковки с разных фабрик.

Процедуры могут назначать разные врачи, процедуры как-то в отдельной ветке повисли

Должность сотрудника без орг.структуры? Сотрудник может переходить на другие должности и меняться окончание WorkTime

Предметная прикладная область не изучена, поэтому и модель =3П (пол, палец, потолок)
29 май 19, 00:10    [21896139]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить