Каково хорошее описание KISS нормальной формы Бойса-Кодда?

StackOverflow https://stackoverflow.com/questions/539324

Вопрос

Что такое KISS (Keep it Simple, Stupid) способ запомнить, что такое нормальная форма Бойса-Кодда и как взять ненормализованную таблицу и BCNF ее?

Википедияинформация:мне не очень помогает.

Это было полезно?

Решение

Определение Криса Дейта на самом деле довольно хорошее, если вы понимаете, что он имеет в виду:

Каждый атрибут

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

должен представлять собой факт

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

о ключе,

Один атрибут особенный, это ключ.Ключ — это атрибут, который должен быть уникальным для всей информации в ваших данных и никогда не должен меняться.Ваше полное имя не является ключом, поскольку оно может измениться.Ваш номер социального страхования не является ключом, поскольку его можно использовать повторно.Ваш SSN плюс дата рождения не являются ключом, даже если эту комбинацию нельзя использовать повторно, поскольку атрибут не может быть комбинацией двух фактов.GUID — это ключ.Число, которое вы увеличиваете и никогда не используете повторно, является ключом.

весь ключ,

Одного ключа должно быть достаточно [и необходимо!] для определения ваших ценностей;вы не можете иметь одни и те же данные, представленные разными ключами, и подмножество ключевых столбцов не может быть достаточным для идентификации факта.Предположим, у вас есть адресная книга со значениями ключа GUID, имени и адреса.Это нормально, когда одно и то же имя появляется дважды с разными ключами, если они представляют разных людей и не являются «одними и теми же данными».Если Мэри Джонс из бухгалтерии меняет свое имя на Мэри Смит, Мэри Джонс из отдела продаж также не меняет свое имя.С другой стороны, если Мэри Смит и Джон Смит имеют одинаковый адрес и это действительно одно и то же место, это не допускается.Вам необходимо создать новую пару ключ/значение с адресом и новым ключом.

Вам также не разрешено использовать ключ для этого нового отдельного адреса в качестве значения в адресной книге, поскольку теперь один и тот же ключ адреса будет представлен дважды.Вместо этого вам нужно создать третью пару ключ/значение со значениями ключа адресной книги и ключа уличного адреса;вы можете найти почтовый адрес человека, сопоставив ключ его книги и ключ адреса в этой группе значений.

и ничего, кроме ключа

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

Так помоги мне, Кодд.

Другие советы

Вот несколько полезных выдержек со страницы Википедии на Третья нормальная форма:

Билл Кент определяет третью нормальную форму следующим образом:

Каждый не ключевой атрибут «должен предоставить факт о клавиши, всей клавиши и ничего, кроме ключа».

Требование, чтобы атрибуты не ключа зависели от «всего ключа», гарантирует, что таблица находится в 2NF;Дальнейшее, требующее, чтобы атрибуты не ключа зависели от «ничего, кроме ключа», гарантирует, что таблица находится в 3NF.

Крис Дэйт адаптирует мнемонику Кента для определения нормальной формы Бойса-Кодда:

«Каждый атрибут должен представлять факт о клавише, всей клавише и ничего, кроме ключа». Здесь требование связано с каждым атрибутом в таблице, а не только не ключевыми атрибутами.

Это вступает в игру, когда таблица имеет несколько составных ключей-кандидатов, а атрибут в одном из ключей-кандидатов зависит от часть другого потенциального ключа.Третья нормальная форма не запрещает этого, поскольку исключает ключевые атрибуты.Но BCNF применяет это правило и к ключевым атрибутам.

Что касается того, как заставить таблицу удовлетворять BCNF, вам необходимо представить дополнительную зависимость с помощью другого атрибута и, возможно, путем разделения атрибутов на другую таблицу.

Я погуглил «нормальная форма Бойса Кодда», и после википедии это второй результат.Мой учебник дает очень простое определение с точки зрения систем управления реляционными базами данных:

Левая часть каждого нетривиального FD должна быть суперключом.

- «Системы баз данных. Полная книга» Гарсиа-Молина, Ульмана и Видома.

Лучший неформальный ответ, который я когда-либо читал, заключается в том, что в BCNF каждая «стрелка» в каждой функциональной зависимости является «стрелкой» из потенциального ключа.Я не помню источник, но, вероятно, это написал Крис Дэйт.

По сути, Бойс-Кодд — это «пятая нормальная форма».Это визуально можно узнать по наличию «атрибутивных объектов» в модели данных для таких вещей, как типы (например,роли, статус, состояние процесса, тип местоположения, тип телефона и т. д.).Атрибутивные сущности (подподтипы) представляют собой списки конечных наборов значений, которые дополнительно классифицируют сущность уровня класса.Таким образом, у вас может быть тип учетной записи электронной почты («мобильный», «настольный», «VOIP») («деловой», «личный», «игровой»), роль (менеджер проекта, разработчик моделей данных, супермодель) и т. д. .Еще одним морфологическим ключом к разгадке является существование супертипов (т.мастер-классы, суперклассы, мета-сущности), такие как Стороны (подтипы — компания, человек и т. д.).

По сути, это таксономия, сошедшая с ума (... нет, видео не такое уж захватывающее) на атомном или листовом уровне;более техническое объяснение см. в комментарии Билла Карвина выше.

Модели уровня Бойса-Кодда, по сути, представляют собой очень подробные логические модели, полученные из более упрощенных концептуальных моделей, основанных на бизнесе.**Они обычно НЕ реализуются дословно в ФИЗИЧЕСКОЙ модели, поскольку оптимизация PDM для повышения производительности (или функциональной простоты) может привести к тому, что супертипы и атрибутивные объекты будут управляться как раскрывающиеся списки в пользовательских интерфейсах или в скрытой логике. в приложении или в ограничениях базы данных и методах обеспечения ссылочной целостности.(т.е.они могут оказаться в виде справочных таблиц в схеме PDM или могут обрабатываться кодом и не быть представлены в базе данных).

Так зачем же им это делать, если они могут и не оказаться в ДПМ?По той же причине вы строите хорошую модель 3NF перед «оптимизацией», чтобы структура базы данных отражала реальный мир и, следовательно, была более стабильной, чем типичные клуджи, которые мы наследуем и вынуждены совершать героические поступки, чтобы заставить работать наших клиентов/бизнесменов. требования меняются.

Зачастую проще всего прислушаться к своей интуиции, и это произойдет естественным образом.Вообще говоря, если вы встретили 3NF, вы встретили BCNF.Здесь не рассматривается подробный анализ ERD и не приводятся примеры, но, по словам Кодда, существует тринадцать правил.Я считаю, что лучше всего следовать этим правилам, но всегда помните, что не существует единственного правильного способа делать что-то, поэтому следуйте им свободно.Итак, что касается СУБД, вот правила:

http://www.87android.com/12-rules-of-relational-database-model-by-codd/

Возможно, это не дает прямого ответа на вопрос, но если вы спрашиваете о том, как добраться до BCNF или о простом способе его запомнить, значит, вы недостаточно хорошо понимаете нормализацию.Хотя это не имеет значения.Реляционные базы данных принимают множество форм, и лишь немногие из них сделаны хорошо.Лучшее, что вы можете сделать, — это знать, что значит быть реляционным, следовать приведенным выше правилам и не беспокоиться об уровне нормализации.Процесс нормализации исключает дублирование данных.На каждом уровне все больше и больше происходит переход к миграции функциональных зависимостей.Помните об этом, и с вами все будет в порядке, все остальное сделают ваша интуиция и интеллект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top