Нормализация отношений. Первая и вторая нормальные формы / Хабр
Предисловие
Нормализация отношений (таблиц) — одна из основополагающих частей теории реляционных баз данных. Нормализация имеет своей целью избавиться от избыточности в отношениях и модифицировать их структуру таким образом, чтобы процесс работы с ними не был обременён различными посторонними сложностями. При игнорировании такого подхода эффективность проектирования стремительно снижается, что вкупе с прочими подобными вольностями может привести к критическим последствиям.
Любому специалисту, по роду своей деятельности так или иначе связанному с проектированием реляционных баз данных, полезно понимать и уметь осуществить нормализацию отношений. И этим постом хотелось бы начать небольшую серию публикаций, посвящённых нормальным формам, имеющую целью дать тем читателям Хабрахабра, которые по различным обстоятельствам ещё не освоили эту тему, возможность легко заполнить этот пробел в знаниях.
Статья не имеет своей целью подробное и точное изложение принципов нормализациии, поскольку это, очевидно, невозможно в рамках блога в силу больших объёмов информации, необходимых для публикации при таком подходе. Кроме этого, для такой цели существует большое количество литературы, написанной прекрасными специалистами. Моя же задача, как я считаю, заключается в том, чтобы популярно продемонстрировать и объяснить основные принципы.
Используемые термины
Атрибут — свойство некоторой сущности. Часто называется полем таблицы.
Домен атрибута — множество допустимых значений, которые может принимать атрибут.
Кортеж — конечное множество взаимосвязанных допустимых значений атрибутов, которые вместе описывают некоторую сущность (строка таблицы).
Отношение — конечное множество кортежей (таблица).
Схема отношения — конечное множество атрибутов, определяющих некоторую сущность. Иными словами, это структура таблицы, состоящей из конкретного набора полей.
Проекция — отношение, полученное из заданного путём удаления и (или) перестановки некоторых атрибутов.
Функциональная зависимость между атрибутами (множествами атрибутов) X и Y означает, что для любого допустимого набора кортежей в данном отношении: если два кортежа совпадают по значению X, то они совпадают по значению Y. Например, если значение атрибута «Название компании» — Canonical Ltd, то значением атрибута «Штаб-квартира» в таком кортеже всегда будет Millbank Tower, London, United Kingdom. Обозначение: {X} -> {Y}.
Первая нормальная форма
Отношение находится в первой нормальной форме (сокращённо 1НФ), если все его атрибуты атомарны, то есть если ни один из его атрибутов нельзя разделить на более простые атрибуты, которые соответствуют каким-то другим свойствам описываемой сущности.
Будем называть исходное отношение основным, а значение неатомарного атрибута — подчинённым.
Для того, чтобы нормализовать исходное отношение, атрибуты которого неатомарны, необходимо объединить схемы основного и подчинённого отношений. Кроме того, если, например, таблица, соответствующая ненормализованному отношению уже содержится в БД и заполнена информацией, задача усложняется тем, что значение неатомарного атрибута может в свою очередь содержать несколько кортежей.
Следует пояснить сказанное на примере. Рассмотрим отношение, имеющее атрибуты «Код сотрудника», «ФИО», «Должность», «Проекты». Очевидно, что один сотрудник может работать над несколькими проектами. Предположим, что проект описывается идентификатором, названием и датой сдачи.
Код сотрудника | ФИО | Должность | Проекты |
1 | Иванов Иван Иванович | Программист | ID: 123; Название: Система управления паровым котлом; Дата сдачи: 30.09.2011 ID: 231; Название: ПС для контроля и оповещения о превышениях ПДК различных газов в помещении; Дата сдачи: 30.11.2011 ID: 321; Название: Модуль распознавания лиц для защитной системы; Дата сдачи: 01.12.2011 |
Примечание: с некоторой точки зрения атрибут «ФИО» можно также считать неатомарным и в таком случае его также следует разделить на более простые, как «Фамилия», «Имя», «Отчество».
Теперь настало время рассмотреть алгоритм нормализации отношения до 1НФ.
- Создать новое отношение, схема которого будет получена путём слияния основной и подчинённой схем исходного отношения в одну.
- Для каждого кортежа исходного отношения включить в новое столько строк, сколько кортежей содержится в подчинённом отношении этого кортежа.
- Заполнить значения атрибутов нового отношения, соответствующих атрибутам подчинённого отношения.
- Заполнить строки нового отношения значениями атомарных атрибутов исходного.
Результат будет выглядеть так:
Код сотрудника | ФИО | Должность | Код проекта | Название | Дата сдачи |
1 | Иванов Иван Иванович | Программист | 123 | Система управления паровым котлом | 30.09.2011 |
1 | Иванов Иван Иванович | Программист | 231 | ПС для контроля и оповещения о превышениях ПДК различных газов в помещении | 30.11.2011 |
1 | Иванов Иван Иванович | Программист | 321 | Модуль распознавания лиц для защитной системы | 01. 12.2011 |
Вторая нормальная форма
Ясно, что отношение, находящееся в 1НФ, также может обладать избыточностью. Для её устранения предназначена вторая нормальная форма. Но прежде чем приступить к её описанию, сначала следует выявить недостатки первой.
Код поставщика | Город | Статус города | Код товара | Количество |
1 | Москва | 20 | 1 | 300 |
1 | Москва | 20 | 2 | 400 |
1 | Москва | 20 | 3 | 100 |
2 | Ярославль | 10 | 4 | 200 |
3 | Ставрополь | 30 | 5 | 300 |
3 | Ставрополь | 30 | 6 | 400 |
4 | Псков | 15 | 7 | 100 |
{ {Код поставщика, Код товара} -> { Количество},
{Код поставщика} -> {Город},
{Код поставщика} -> {Статус},
{Город} -> {Статус} }
Первичный ключ в отношении: {Код поставщика, Код товара}.
Очевидно, что отношение обладает избыточностью: оно описывает две сущности — поставку и поставщика. В связи с этим возникают следующие аномалии:
- Аномалия вставки. В отношение нельзя добавить информацию о поставщике, который ещё не поставил ни одного товара.
- Аномалия удаления. Если от поставщика была только одна поставка, то при удалении информации о ней будет удалена и вся информация о поставщике.
- Аномалия обновления. Если необходимо изменить какую-либо информацию о поставщике (например, поставщик переехал в другой город), то придётся изменять значения атрибутов во всех записях о поставках от него.
Чтобы устранить эти аномалии, необходимо разбить исходное отношение на проекции:
- В первую следует включить первичный ключ и все неключевые атрибуты явно зависимые от него.
- В остальные проекции (в данном случае она одна) будут включены неключевые атрибуты, зависящие от первичного ключа
Код поставщика | Код товара | Количество |
1 | 1 | 300 |
1 | 2 | 400 |
1 | 3 | 100 |
2 | 4 | 200 |
3 | 5 | 300 |
3 | 6 | 400 |
4 | 7 | 100 |
Код поставщика | Город | Статус города |
1 | Москва | 20 |
2 | Ярославль | 10 |
3 | Ставрополь | 30 |
4 | Псков | 15 |
{ {Код поставщика} -> {Город},
{Код поставщика} -> {Статус},
{Город} -> {Статус} }
Такое разбиение устранило аномалии, описанные выше: можно добавить информацию о поставщике, который ещё не поставлял товар, удалить информацию о поставке без удаления информации о поставщике, а также легко обновить информацию в случае если поставщик переехал в другой город.
Теперь можно сформулировать определение второй нормальной формы, до которого, скорее всего, читатель уже смог догадаться самостоятельно: отношение находится во второй нормальной форме (сокращённо 2НФ) тогда и только тогда, когда оно находится в первой нормальной форме и каждый его неключевой атрибут неприводимо зависим от первичного ключа.
Литература
Для более глубокого и основательного изучения рассмотренной темы, рекомендуется книга «Введение в системы баз данных» Криса Дж. Дейта, на основе материалов которой и была написана данная статья.
21. 1НФ: Основные определения и правила преобразования.
В реляционной модели отношение всегда находится в первой нормальной форме по определению понятия отношение.
Что же касается различных таблиц, то они могут не быть правильными представлениями отношений и, соответственно, могут не находиться в 1NF.
таблица нормализована (эквивалентно — находится в первой нормальной форме) тогда и только тогда, когда она является прямым и верным представлением некоторого отношения, кокретно:
Порядок строк не несет в себе никакой информации.
Порядок столбцов не несет в себе никакой информации.
Нет повторяющихся строк.
Каждое пересечение строки и столбца содержит ровно одно значение из соответствующего домена (и больше ничего).
Все столбцы являются обычными — в таблице нет «скрытых» компонентов, которые
могут быть доступны только в вызове некоторого специального оператора взамен ссылок на имена регулярных столбцов, или которые приводят к побочным эффектам для строк или таблиц при вызове стандартных операторов. Таким образом, например, строки не имеют идентификаторов кроме обычных значений потенциальных ключей (без скрытых «идентификаторов строк» или «идентификаторов объектов»). Они также не имеют скрытых временных меток
Сотрудник | Номер телефона |
Иванов И. И. | 283-56-82 |
Петров П. П. | 708-62-34 |
Таблица 3 Ненормализованная
Сотрудник | Номер телефона |
Иванов И. И. | 283-56-82 |
Иванов И. И. | 390-57-34 |
Петров П. П. | 708-62-34 |
Таблица 4 Нормализованная
Кирпич лицевой одинарный пустотелый Баварская кладка 1НФ (480 шт./7200 шт.)
Главными минеральными компонентами, используемыми в производстве керамического лицевого кирпича, служат песок и глина. Материал изготавливается без применения красящих добавок. После высокотемпературной обработки (свыше 950°C) облицовка приобретает качества, свойственные натуральному камню.
Сферы применения
Пустотелые камни из керамики применяются для возведения стен зданий жилого, общественного и промышленного назначения. Ими можно облицовывать стены снаружи и изнутри, обкладывать колонны и камины, отделывать дымоходы.
Достоинства:
- Стопроцентная экологичность. Для лицевого керамического кирпича берется только чистая увлажненная прессованная глина, которую формируют и отправляют на обжиг в туннельную печь. Никаких химикатов!
- Бесспорная эстетика. Его красивые оттенки (красный, флэш) и фактура (рустик) позволяют реализовать любые дизайнерские задумки.
- Долговечность. Эта облицовка невосприимчива к ультрафиолету и устойчива к механическим воздействиям. Она сохраняет свою привлекательность и эксплуатационные характеристики весь срок службы, а это ни много ни мало – более 100 лет. Так что все это время капремонт фасаду не понадобится!
- Морозоустойчивость. Это важное достоинство для нашего климата, для которого характерны температурные перепады и суровые зимы. Структура материала не подвергается разрушению даже после 30-40 циклов оттаивания-промерзания.
- Экономия. Изначальная цена материала довольно высока, однако со временем он с лихвой себя оправдывает. Лицевой кирпич существенно снижает расходы на саму кладку, стоимость же здания, облицованного керамическим камнем, с годами лишь поднимется.
Покупайте лицевой кирпич одинарный пустотелый Баварская кладка 1НФ в Нижнем Новгороде в нашем интернет-магазине: поможем выбрать, рассчитать и доставить!
Первая нормальная форма (1NF) — GeeksforGeeks
Если таблица имеет избыточность данных и не нормализована должным образом, то будет сложно обрабатывать и обновлять базу данных без потери данных. Это также потребляет дополнительное пространство памяти, а вставка, обновление и удаление Аномалии очень часты, если база данных не нормализована .
Нормализация — это процесс минимизации избыточности отношения или набора отношений. Избыточность в отношении может вызвать аномалии при вставке, удалении и обновлении.Таким образом, это помогает минимизировать избыточность в отношениях. Обычные формы используются для устранения или уменьшения избыточности в таблицах базы данных.
Есть разные уровни нормализации. Вот некоторые из них:
1. Первая нормальная форма (1NF) 2. Вторая нормальная форма (2NF) 3. Третья нормальная форма (3NF) 4. Нормальная форма Бойса-Кодда (BCNF) 5. Четвертая нормальная форма (4NF) 6. Пятая нормальная форма (5NF)
В этой статье мы обсудим первую нормальную форму (1NF).
Первая нормальная форма (1NF):
Если отношение содержит составной или многозначный атрибут, оно нарушает первую нормальную форму, или отношение находится в первой нормальной форме, если оно не содержит составных или мульти- оцененный атрибут . Отношение находится в первой нормальной форме, если каждый атрибут в этом отношении является однозначным атрибутом.
Таблица находится в 1 NF iff:
- Есть только однозначные атрибуты.
- Домен атрибутов не меняется.
- У каждого атрибута / столбца есть уникальное имя.
- Порядок, в котором хранятся данные, не имеет значения.
Рассмотрим примеры, приведенные ниже.
Пример-1:
Отношение STUDENT в таблице 1 не входит в 1NF из-за многозначного атрибута STUD_PHONE. Его разложение на 1NF показано в таблице 2.
Пример-2:
ID Name Courses ------------------ 1 А c1, c2 2 E c3 3 M C2, c3
В приведенной выше таблице курс является многозначным атрибутом, поэтому его нет в 1NF.
Таблица ниже находится в 1NF, поскольку нет многозначного атрибута:
ID Name Course ------------------ 1 А c1 1 А c2 2 E c3 3 млн c1 3 M c2
Примечание: Дизайн базы данных считается плохим, если он даже не в первой нормальной форме (1NF).
Вниманию читателя! Не прекращайте учиться сейчас. Изучите все концепции GATE CS с бесплатными живыми классами на нашем канале YouTube.
Что такое нормализация в SQL? 1NF, 2NF, 3NF, Пример базы данных BCNF (СУБД)
Что такое нормализация?
Нормализация — это метод проектирования базы данных, который уменьшает избыточность данных и устраняет нежелательные характеристики, такие как аномалии вставки, обновления и удаления. Правила нормализации делят большие таблицы на более мелкие и связывают их с помощью отношений. Целью нормализации в SQL является устранение избыточных (повторяющихся) данных и обеспечение логического хранения данных.
Изобретатель реляционной модели Эдгар Кодд предложил теорию нормализации данных с введением первой нормальной формы и продолжил расширять теорию с помощью второй и третьей нормальных форм. Позже он присоединился к Раймонду Ф. Бойсу, чтобы разработать теорию нормальной формы Бойса-Кодда.
В этом руководстве по нормализации базы данных вы узнаете:
Нормальные формы базы данных
Вот список нормальных форм
- 1NF (первая нормальная форма)
- 2NF (вторая нормальная форма)
- 3NF (третья нормальная форма )
- BCNF (нормальная форма Бойса-Кодда)
- 4NF (четвертая нормальная форма)
- 5NF (пятая нормальная форма)
- 6NF (шестая нормальная форма)
Теория нормализации данных в сервере MySQL все еще разрабатывается способствовать.Например, есть обсуждения даже по 6 -й нормальной форме. Однако в большинстве практических приложений нормализация достигает максимума в 3 rd Normal Form . Эволюция теорий нормализации SQL проиллюстрирована ниже:
Нормальные формы базы данныхНормализация базы данных с примерами
База данных Пример нормализации можно легко понять с помощью тематического исследования. Предположим, видеотека ведет базу данных фильмов, взятых напрокат.Без какой-либо нормализации в базе данных вся информация хранится в одной таблице, как показано ниже. Давайте разберемся с базой данных нормализации на примере таблиц:
Здесь вы видите, что столбец арендованных фильмов имеет несколько значений. Теперь перейдем к первой нормальной форме:
Правила 1NF (первая нормальная форма)- Каждая ячейка таблицы должна содержать одно значение.
- Каждая запись должна быть уникальной.
Приведенная выше таблица в примере 1NF-
1NF
Прежде чем мы продолжим, давайте разберемся в нескольких вещах —
Что такое KEY в SQL?
КЛЮЧ в SQL — это значение, используемое для однозначной идентификации записей в таблице.КЛЮЧ SQL — это один столбец или комбинация нескольких столбцов, которые используются для однозначной идентификации строк или кортежей в таблице. Ключ SQL используется для выявления дублирующейся информации, а также помогает установить связь между несколькими таблицами в базе данных.
Примечание. Столбцы в таблице, которые НЕ используются для уникальной идентификации записи, называются неключевыми столбцами.
Что такое первичный ключ?
Первичный элемент — это значение одного столбца, используемое для однозначной идентификации записи базы данных.
Он имеет следующие атрибуты
- Первичный ключ не может быть NULL
- Значение первичного ключа должно быть уникальным
- Значения первичного ключа следует изменять редко
- Первичный ключ должен получить значение при вставке новой записи .
Что такое составной ключ?
Составной ключ — это первичный ключ, состоящий из нескольких столбцов, используемых для уникальной идентификации записи.
В нашей базе данных есть два человека с одинаковым именем Роберт Фил, но они живут в разных местах.
Следовательно, нам требуется как полное имя, так и адрес, чтобы однозначно идентифицировать запись. Это составной ключ.
Давайте перейдем ко второй нормальной форме. 2NF
2NF (Вторая нормальная форма). сделайте нашу простую базу данных в форме нормализации 2
nd , если мы не разбиваем приведенную выше таблицу.Мы разделили нашу таблицу 1NF на две таблицы, а именно.Таблица 1 и Таблица 2. Таблица 1 содержит информацию об участниках. Таблица 2 содержит информацию о взятых напрокат фильмах.
Мы ввели новый столбец с именем Membership_id, который является первичным ключом для таблицы 1. Записи могут быть однозначно идентифицированы в таблице 1 с использованием идентификатора членства
База данных — внешний ключ
В таблице 2 Membership_ID — это внешний ключ
Внешний ключ Ключ ссылается на первичный ключ другой таблицы! Это помогает соединить ваши таблицы.
- Внешний ключ может иметь другое имя, чем его первичный ключ.
- Он гарантирует, что строки в одной таблице имеют соответствующие строки в другой.
- В отличие от первичного ключа, они не обязательно должны быть уникальными.Чаще всего это не так.
- Внешние ключи могут быть нулевыми, хотя первичные ключи не могут
Зачем вам нужен внешний ключ?
Предположим, новичок вставляет запись в таблицу B, например
. Вы сможете вставлять только те значения в свой внешний ключ, которые существуют в уникальном ключе в родительской таблице. Это помогает в ссылочной целостности.
Вышеупомянутую проблему можно решить, объявив идентификатор членства из таблицы 2 как внешний ключ идентификатора членства из таблицы 1
Теперь, если кто-то попытается вставить значение в поле идентификатора членства, которого нет в родительской таблице, возникнет ошибка. быть показаны!
Что такое транзитивные функциональные зависимости?
Переходная функциональная зависимость — это когда изменение неключевого столбца может привести к изменению любого из других неключевых столбцов
Рассмотрим таблицу 1. Изменение полного имени в неключевом столбце может привести к изменению приветствия.
Давайте перейдем к правилам 3NF
3NF (Третья нормальная форма)
- Правило 1 — Быть в 2NF
- Правило 2 — Не имеет транзитивных функциональных зависимостей
Чтобы переместить нашу таблицу 2NF в 3NF, нам снова нужно снова разделите наш стол.
Пример 3NF
Ниже приведен пример 3NF в базе данных SQL:
Мы снова разделили наши таблицы и создали новую таблицу, в которой хранятся приветствия.
Нет транзитивных функциональных зависимостей, и, следовательно, наша таблица находится в 3NF
В таблице 3 ID приветствия является первичным ключом, а в таблице 1 ID приветствия является чуждым первичному ключу в таблице 3
Теперь наш небольшой пример находится в уровень, который не может быть подвергнут дальнейшей декомпозиции для достижения более высоких нормальных форм нормализации в СУБД. Фактически, это уже в более высоких формах нормализации. В сложных базах данных обычно требуются отдельные усилия для перехода на следующие уровни нормализации данных.Однако ниже мы кратко обсудим следующие уровни нормализации базы данных.
BCNF (нормальная форма Бойса-Кодда)
Даже если база данных находится в нормальной форме 3 rd , все равно будут возникать аномалии, если у нее будет более одного ключа-кандидата .
Иногда BCNF также называют 3.5 Нормальная форма.
Правила 4NF (четвертой нормальной формы)
Если ни один экземпляр таблицы базы данных не содержит двух или более независимых и многозначных данных, описывающих релевантный объект, то он представлен в нормальной форме 4 th .
Правила 5NF (Пятая нормальная форма)
Таблица находится в 5 th Normal Form, только если она находится в 4NF и не может быть разложена на любое количество меньших таблиц без потери данных.
6NF (Шестая нормальная форма) Предлагается
6 th Нормальная форма не стандартизирована, но, тем не менее, она обсуждается экспертами по базам данных в течение некоторого времени. Надеюсь, в ближайшем будущем у нас будет четкое и стандартизованное определение для 6 th Normal Form…
Это все, что касается нормализации SQL !!!
Резюме
- Проектирование базы данных имеет решающее значение для успешного внедрения системы управления базами данных, которая отвечает требованиям к данным корпоративной системы.
- Нормализация в СУБД — это процесс, который помогает создавать рентабельные системы баз данных с лучшими моделями безопасности.
- Функциональные зависимости являются очень важным компонентом процесса нормализации данных.
- Большинство систем баз данных являются нормализованными базами данных до третьей нормальной формы.
- Первичный ключ однозначно идентифицирует запись в таблице и не может быть нулевым
- Внешний ключ помогает соединить таблицу и ссылается на первичный ключ
1NF, 2NF, 3NF и BCNF в нормализации базы данных
Нормализация базы данных — это метод организации данных в базе данных. Нормализация — это систематический подход к декомпозиции таблиц для устранения избыточности (повторения) данных и нежелательных характеристик, таких как аномалии вставки, обновления и удаления.Это многоэтапный процесс, который переводит данные в табличную форму, удаляя повторяющиеся данные из таблиц отношений.
Нормализация используется в основном для двух целей:
- Удаление избыточных (бесполезных) данных.
- Обеспечение логического хранения зависимостей данных.
Видео ниже даст вам хороший обзор нормализации базы данных. Если хотите, можете пропустить видео, так как концепция подробно описана под видео.
Проблемы без нормализации
Если таблица не нормализована должным образом и не имеет избыточности данных, она не только потребляет дополнительное пространство в памяти, но и затрудняет обработку и обновление базы данных без потери данных. Аномалии вставки, обновления и удаления очень часты, если база данных не нормализована. Чтобы понять эти аномалии, давайте возьмем пример таблицы Student .
rollno | имя | филиал | hod | office_tel | ||
---|---|---|---|---|---|---|
401 | Akon | CSE | Mr.X | 53337 | ||
402 | Bkon | CSE | Mr. | CSE | Mr. X | 53337 |
В приведенной выше таблице у нас есть данные 4 Computer Sci. студенты. Как мы видим, данные для полей branch
, hod
(Head of Department) и office_tel
повторяются для студентов, которые находятся в том же филиале в колледже, это Data Redundancy .
Аномалия вставки
Предположим, что для нового приема, до тех пор, пока студент не выберет филиал, данные студента не могут быть вставлены, иначе нам придется установить информацию о филиале как NULL .
Кроме того, если нам нужно вставить данные о 100 студентах одного и того же отделения, то информация об отделении будет повторяться для всех этих 100 студентов.
Эти сценарии не что иное, как Аномалии вставки .
Аномалия обновления
Что, если мистерХ покидает колледж? или больше не является HOD факультета информатики? В этом случае необходимо обновить все записи об учащихся, и если по ошибке мы пропустим какую-либо запись, это приведет к несогласованности данных. Это аномалия обновления.
Аномалия удаления
В нашей таблице Студент две разные информации хранятся вместе: информация о студенте и информация о филиале. Следовательно, в конце учебного года, если будут удалены записи о студентах, мы также потеряем информацию о филиале.Это аномалия удаления.
Правило нормализации
Правила нормализации делятся на следующие нормальные формы:
- Первая нормальная форма
- Вторая нормальная форма
- Третья нормальная форма
- BCNF
- Четвертая нормальная форма
Первая нормальная форма (1NF)
Чтобы таблица была в Первой нормальной форме, она должна соответствовать следующим 4 правилам:
- Он должен иметь только однозначные (атомарные) атрибуты / столбцы.
- Значения, хранящиеся в столбце, должны относиться к одному домену
- Все столбцы в таблице должны иметь уникальные имена.
- И порядок, в котором хранятся данные, значения не имеет.
В следующем уроке мы подробно обсудим первую нормальную форму .
Вторая нормальная форма (2NF)
Для того, чтобы таблица была во второй нормальной форме,
- Он должен быть в первой нормальной форме.
- И у него не должно быть частичной зависимости.
Чтобы понять, что такое частичная зависимость и как нормализовать таблицу до 2-й нормы, перейдите к руководству Вторая нормальная форма .
Третья нормальная форма (3NF)
Считается, что таблица имеет третью нормальную форму, когда,
- Это вторая нормальная форма.
- И у него нет транзитивной зависимости.
Вот учебник Третья нормальная форма . Но мы предлагаем вам сначала изучить вторую нормальную форму, а затем перейти к третьей нормальной форме.
Нормальная форма Бойса и Кодда (BCNF)
Нормальная форма Бойса и Кодда — это более высокая версия Третьей нормальной формы. Эта форма касается определенного типа аномалии, которая не обрабатывается 3NF. Таблица 3NF, которая не имеет нескольких перекрывающихся ключей-кандидатов, называется BCNF. Чтобы таблица находилась в BCNF, должны быть выполнены следующие условия:
- R должен быть в 3-й нормальной форме
- и для каждой функциональной зависимости (X → Y) X должен быть супер-ключом.
Чтобы подробно узнать о BCNF на очень простом для понимания примере, перейдите к руководству Boye-Codd Normal Form .
Четвертая нормальная форма (4NF)
Считается, что таблица находится в четвертой нормальной форме, когда,
- Он находится в нормальной форме Бойса-Кодда.
- И у него нет многозначной зависимости.
Вот учебник Четвертая нормальная форма . Но мы предлагаем вам понять другие нормальные формы, прежде чем переходить к четвертой нормальной форме.
Что такое первая нормальная форма (1NF)?
Что означает первая нормальная форма (1NF)?
Первая нормальная форма (1NF) устанавливает фундаментальные правила нормализации базы данных и относится к одной таблице в системе реляционной базы данных. Нормализация состоит из трех основных шагов, каждый из которых строится на последнем. Первая из них — первая нормальная форма.
Первая нормальная форма утверждает, что:
- Каждый столбец в таблице должен быть уникальным
- Для каждого набора связанных данных должны быть созданы отдельные таблицы
- Каждая таблица должна быть идентифицирована с помощью уникального столбца или конкатенированных столбцов, называемых первичным ключом.
- Невозможно дублировать строки
- нельзя дублировать столбцы
- нет пересечений строк / столбцов, содержащих нулевое значение
- нет пересечения строк / столбцов, содержащих многозначные поля
Техопедия объясняет первую нормальную форму (1NF)
Первым шагом в подтверждении 1NF является изменение многозначных столбцов, чтобы убедиться, что каждый столбец в таблице не содержит более одной записи.
Поиск записей с повторяющимися записями сложен. Чтобы преодолеть эту ситуацию, все записи, включенные в таблицу реляционной базы данных, должны быть идентифицированы уникальным значением, которое будет иметь отдельный столбец (или атрибут). Этот уникальный ключ называется индексным ключом и используется для поиска данных для поиска или других манипуляций.
Наличие уникального ключа не соответствует требованиям 1NF. Согласно правилам, в одном поле не может быть нескольких записей. Например, в таблице данных с информацией о клиенте в одном поле может быть разрешено хранить несколько записей, например, если у покупателя есть несколько телефонных номеров.Это нарушение правил 1NF. Эта конкретная проблема в нашем примере может быть решена путем создания индекса идентификатора клиента в основной таблице, а затем добавления отдельной таблицы, в которой есть столбец для номеров телефонов и другой столбец для идентификатора клиента.
Это позволяет правильно использовать реляционные запросы для извлечения данных из реляционной базы данных. Пустые поля или поля с несколькими записями вызывают проблемы с обработкой и извлечением данных, поэтому процесс нормализации устраняет двусмысленность.
Удаление повторяющихся значений из таблицы — следующий шаг к первой нормализованной форме.Повторяющиеся значения можно переместить в новую таблицу.
Последний шаг в реализации первой нормальной формы — поддержание атомарности данных. Каждое отдельное поле должно содержать наименьший возможный элемент данных, чтобы упростить сортировку и поиск. Например, столбец даты можно разделить на день, месяц и год.
Таблицы, удовлетворяющие первой нормальной форме, также могут содержать функционально зависимые поля. Функциональная зависимость существует между двумя полями, когда значение в поле 1 определяет значение в поле 2, а в поле 2 есть только одно значение.В таком случае поле 2 функционально зависит от поля 1.
Таблицы, удовлетворяющие высшим нормальным формам (второй, третьей и четвертой), обязательно следуют первой нормальной форме, но обратное неверно. Все таблицы, соответствующие первой нормальной форме, могут не соответствовать высшим нормальным формам, поскольку высшие нормальные формы включают еще более строгие правила.
1NF, 2NF, 3NF и BCNF в базе данных
Нормализация — это процесс организации данных в базе данных, чтобы избежать избыточности данных, аномалии вставки, аномалии обновления и аномалии удаления.Давайте сначала обсудим аномалии, а затем обсудим нормальные формы с примерами.
Аномалии в СУБД
Есть три типа аномалий, которые возникают, когда база данных не нормализована. Это — аномалия вставки, обновления и удаления. Давайте рассмотрим пример, чтобы понять это.
Пример : Предположим, что производственная компания хранит сведения о сотруднике в таблице с именем employee, которая имеет четыре атрибута: emp_id для хранения идентификатора сотрудника, emp_name для хранения имени сотрудника, emp_address для хранения адреса сотрудника и emp_dept для хранения сведений об отделе, в котором сотрудник работает. В какой-то момент таблица выглядит так:
emp_id | emp_name | emp_address | emp_dept |
101 | Рик | Дели | D001 |
101 | Рик | Дели | D002 |
123 | Мэгги | Агра | D890 |
166 | Гленн | Ченнаи | D900 |
166 | Гленн | Ченнаи | D004 |
Приведенная выше таблица не нормализована.Мы увидим проблемы, с которыми мы сталкиваемся, когда таблица не нормализована.
Обновление аномалии : В приведенной выше таблице у нас есть две строки для сотрудника Рика, поскольку он принадлежит к двум отделам компании. Если мы хотим обновить адрес Рика, мы должны обновить его в двух строках, иначе данные станут несовместимыми. Если каким-то образом правильный адрес будет обновлен в одном отделе, но не в другом, то, согласно базе данных, у Рика будет два разных адреса, что неверно и приведет к несогласованным данным.
Вставить аномалию : Предположим, к компании присоединяется новый сотрудник, который проходит обучение и в настоящее время не закреплен за каким-либо отделом, тогда мы не сможем вставить данные в таблицу, если в поле emp_dept не допускаются значения NULL.
Удалить аномалию : Предположим, если в какой-то момент компания закроет отдел D890, то удаление строк, которые имеют emp_dept как D890, также приведет к удалению информации о сотруднице Мэгги, поскольку она назначена только этому отделу.
Чтобы преодолеть эти аномалии, нам необходимо нормализовать данные. В следующем разделе мы обсудим нормализацию.
Нормализация
Вот наиболее часто используемые нормальные формы:
- Первая нормальная форма (1НФ)
- Вторая нормальная форма (2НФ)
- Третья нормальная форма (3НФ)
- Нормальная форма Бойса и Кодда (BCNF)
Первая нормальная форма (1НФ)
Согласно правилу первой нормальной формы атрибут (столбец) таблицы не может содержать несколько значений. Он должен содержать только атомарные значения.
Пример : Предположим, компания хочет сохранить имена и контактные данные своих сотрудников. Он создает таблицу, которая выглядит так:
emp_id | emp_name | emp_address | emp_mobile |
101 | Гершель | Нью-Дели | 8 |
102 | Джон | Канпур | 8812121212 92222 |
103 | Рон | Ченнаи | 7778881212 |
104 | Лестер | Бангалор | 991238123450987 |
Два сотрудника (Джон и Лестер) имеют два мобильных номера, поэтому компания сохранила их в том же поле, что и в таблице выше.
Эта таблица — не в 1NF , поскольку правило гласит, что «каждый атрибут таблицы должен иметь атомарные (одиночные) значения», значения emp_mobile для сотрудников Джон и Лестер нарушают это правило.
Чтобы таблица соответствовала 1НФ, у нас должны быть такие данные:
emp_id | emp_name | emp_address | emp_mobile |
101 | Гершель | Нью-Дели | 8 |
102 | Джон | Канпур | 8812121212 |
102 | Джон | Канпур | 92222 |
103 | Рон | Ченнаи | 7778881212 |
104 | Лестер | Бангалор | 99123 |
104 | Лестер | Бангалор | 8123450987 |
Вторая нормальная форма (2НФ)
Считается, что таблица находится в 2НФ, если выполняются оба следующих условия:
- Таблица в 1НФ (первая нормальная форма)
- Никакой неосновной атрибут не зависит от правильного подмножества любого ключа-кандидата таблицы.
Атрибут, который не является частью какого-либо ключа-кандидата, называется непервичным атрибутом.
Пример : Предположим, школа хочет хранить данные учителей и предметов, которые они преподают. Они создают таблицу, которая выглядит следующим образом: поскольку учитель может преподавать несколько предметов, в таблице может быть несколько строк для одного и того же учителя.
учитель_ид | субъект | Возраст учителя |
111 | Математика | 38 |
111 | Физика | 38 |
222 | Биология | 38 |
333 | Физика | 40 |
333 | Химия | 40 |
Ключи кандидатов : {teacher_id, subject}
Неосновной атрибут : teacher_age
Таблица находится в 1 NF, потому что каждый атрибут имеет атомарные значения. Однако его нет в 2NF, потому что непервичный атрибут teacher_age зависит только от teacher_id, который является правильным подмножеством ключа кандидата. Это нарушает правило для 2NF, поскольку правило гласит, что « нет неосновных атрибутов не зависит от правильного подмножества любого ключа-кандидата в таблице».
Чтобы таблица соответствовала 2NF, мы можем разбить ее на две таблицы следующим образом:
teacher_details table:
учитель_ид | Возраст учителя |
111 | 38 |
222 | 38 |
333 | 40 |
Teacher_subject table:
учитель_ид | субъект |
111 | Математика |
111 | Физика |
222 | Биология |
333 | Физика |
333 | Химия |
Теперь таблицы соответствуют Второй нормальной форме (2NF).
Третья нормальная форма (3НФ)
Дизайн стола считается относящимся к 3NF, если выполняются оба следующих условия:
Атрибут, который не является частью какого-либо ключа-кандидата, называется непервичным атрибутом.
Другими словами, 3NF можно объяснить так: таблица находится в 3NF, если она находится в 2NF и для каждой функциональной зависимости X-> Y выполняется хотя бы одно из следующих условий:
- X — это супер ключ таблицы
- Y — основной атрибут таблицы
Атрибут, который является частью одного из ключей-кандидатов, известен как основной атрибут.
Пример : Предположим, компания хочет сохранить полный адрес каждого сотрудника, они создают таблицу с именем employee_details, которая выглядит следующим образом:
emp_id | emp_name | emp_zip | emp_state | emp_city | emp_district |
1001 | Иоанна | 282005 | УП | Агра | Дайал Баг |
1002 | Аджит | 222008 | TN | Ченнаи | М-Сити |
1006 | Лора | 282007 | TN | Ченнаи | Уррапаккам |
1101 | Лилли | 2 | Великобритания | Паури | Бхагван |
1201 | Стив | 222999 | МП | Гвалиор | Ратан |
Супер ключи : {emp_id}, {emp_id, emp_name}, {emp_id, emp_name, emp_zip}… так далее
Candidate Keys : {emp_id}
Непростые атрибуты : все атрибуты, кроме emp_id, не- prime, поскольку они не являются частью каких-либо ключей-кандидатов.
Здесь emp_state, emp_city и emp_district зависят от emp_zip. Кроме того, emp_zip зависит от emp_id, что делает непростые атрибуты (emp_state, emp_city и emp_district) транзитивно зависимыми от суперключа (emp_id). Это нарушает правило 3NF.
Чтобы эта таблица соответствовала 3NF, мы должны разбить таблицу на две таблицы, чтобы удалить транзитивную зависимость:
стол сотрудников:
emp_id | emp_name | emp_zip |
1001 | Иоанна | 282005 |
1002 | Аджит | 222008 |
1006 | Лора | 282007 |
1101 | Лилли | 2 |
1201 | Стив | 222999 |
employee_zip таблица:
emp_zip | emp_state | emp_city | emp_district |
282005 | УП | Агра | Дайал Баг |
222008 | TN | Ченнаи | М-Сити |
282007 | TN | Ченнаи | Уррапаккам |
2 | Великобритания | Паури | Бхагван |
222999 | МП | Гвалиор | Ратан |
Нормальная форма Бойса Кодда (BCNF)
Это усовершенствованная версия 3NF, поэтому ее также называют 3. 5NF. BCNF строже, чем 3NF. Таблица соответствует BCNF, если она находится в 3NF и для каждой функциональной зависимости X-> Y, X должен быть суперключом таблицы.
Пример : Предположим, есть компания, в которой сотрудники работают в более чем в одном отделе . Они хранят данные так:
emp_id | emp_nationality | emp_dept | dept_type | dept_no_of_emp |
1001 | Австрийский | Производство и планирование | D001 | 200 |
1001 | Австрийский | магазинов | D001 | 250 |
1002 | Американский | дизайн и техническая поддержка | Д134 | 100 |
1002 | Американский | Отдел закупок | Д134 | 600 |
Функциональные зависимости в таблице выше :
emp_id -> emp_nationality
emp_dept -> {dept_type, dept_no_of_emp}
Ключ кандидата : {emp_id, emp_dept}
Таблица отсутствует в BCNF, поскольку ни emp_id, ни emp_dept сами по себе не являются ключами.
Чтобы таблица соответствовала BCNF, мы можем разбить ее на три таблицы следующим образом:
emp_nationality table:
emp_id | emp_nationality |
1001 | Австрийский |
1002 | Американский |
emp_dept таблица:
emp_dept | dept_type | dept_no_of_emp |
Производство и планирование | D001 | 200 |
магазинов | D001 | 250 |
дизайн и техническая поддержка | Д134 | 100 |
Отдел закупок | Д134 | 600 |
emp_dept_mapping таблица:
emp_id | emp_dept |
1001 | Производство и планирование |
1001 | магазинов |
1002 | дизайн и техническая поддержка |
1002 | Отдел закупок |
Функциональные зависимости :
emp_id -> emp_nationality
emp_dept -> {dept_type, dept_no_of_emp}
Ключи кандидатов :
Для первой таблицы: emp_id
Для второй таблицы: emp_dept
Для третьей таблицы: {emp_id, emp_dept}
Теперь это в BCNF, поскольку в обеих функциональных зависимостях левая часть является ключом.
Первая нормальная форма (1NF) нормализации базы данных
В этом уроке мы узнаем о 1-й (первой) нормальной форме, которая больше похожа на шаг 1 процесса нормализации. Первая нормальная форма предполагает, что вы создадите свою таблицу таким образом, чтобы ее можно было легко расширить, и вам было бы легче извлекать из нее данные, когда это необходимо.
В нашем последнем руководстве мы узнали и поняли, как избыточность или повторение данных может привести к нескольким проблемам, таким как аномалии при вставке, удалении и обновлении, и как нормализация может уменьшить избыточность данных и сделать данные более значимыми.
Если таблицы в базе данных даже не в первой нормальной форме, это считается неправильным дизайном базы данных .
Правила для первой нормальной формы
Первая нормальная форма предполагает, что вы будете следовать нескольким простым правилам при проектировании базы данных, а именно:
Правило 1.
Однозначные атрибутыКаждый столбец вашей таблицы должен иметь однозначное значение, что означает, что они не должны содержать несколько значений.Мы объясним это на примере позже, а пока давайте посмотрим на другие правила.
Правило 2: Домен атрибутов не должен изменяться
Это скорее правило «здравого смысла». В каждом столбце сохраняемые значения должны быть одного типа или типа.
Например: Если у вас есть столбец dob
для сохранения даты рождения группы людей, то вы не можете или не должны сохранять «имена» некоторых из них в этом столбце вместе с «датой рождения». других в этой колонке.Он должен содержать только «дату рождения» для всех записей / строк.
Правило 3: Уникальное имя для атрибутов / столбцов
Это правило предполагает, что каждый столбец в таблице должен иметь уникальное имя. Это сделано для того, чтобы избежать путаницы при извлечении данных или выполнении любой другой операции с сохраненными данными.
Если один или несколько столбцов имеют одинаковое имя, система СУБД запутается.
Правило 4: Порядок не имеет значения
Это правило гласит, что порядок, в котором вы храните данные в своей таблице, не имеет значения.
Время для примера
Хотя все правила говорят сами за себя, давайте рассмотрим пример, в котором мы создадим таблицу для хранения данных об учениках, в которой будут указаны номер ученика, его имя и названия предметов, которые они выбрали.
Вот наша таблица с добавленными в нее примерами данных.
roll_no | имя | тема | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
101 | Akon | OS, CN | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
103 | Ckon | Java | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Java | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
roll_no | имя | тема |
---|---|---|
101 | Akon | ОС |
101 | Akon | CN |
CN | ||
CN | ||
9034 Bkon | C | |
102 | Bkon | C ++ |
Таким образом, хотя некоторые значения повторяются, но значения для столбца subject
теперь атомарны для каждой записи / строки.
При использовании первой нормальной формы избыточность данных увеличивается, поскольку в нескольких строках будет много столбцов с одинаковыми данными, но каждая строка в целом будет уникальной.
Нормализация в реляционных базах данных: первая нормальная форма (1NF), вторая нормальная форма (2NF) и третья нормальная форма (3NF)
Что такое нормализация базы данных? Какие существуют нормальные формы и для чего они нужны? Узнайте в этой статье.
Нормализация в реляционных базах данных — это процесс проектирования, который сводит к минимуму избыточность данных и позволяет избежать аномалий обновления.По сути, вы хотите, чтобы каждая часть информации сохранялась ровно один раз; если информация изменится, вам нужно будет обновить ее только в одном месте.
Теория нормальных форм придает строгий смысл этим неформальным концепциям. Есть много нормальных форм . В этой статье мы рассмотрим самое основное:
- Первая нормальная форма (1НФ)
- Вторая нормальная форма (2НФ)
- Третья нормальная форма (3НФ)
Существуют нормальные формы выше 3NF, но на практике вы обычно нормализуете свою базу данных до третьей нормальной формы или до нормальной формы Бойса-Кодда, которую мы здесь не будем рассматривать.
Итак, что это за теория нормальных форм? Он имеет дело с математической конструкцией отношений (которые немного отличаются от таблиц реляционной базы данных). Процесс нормализации состоит из изменения дизайна на разных этапах, переходя от ненормализованного набора отношений (таблиц) к первой нормальной форме, затем ко второй нормальной форме и затем к третьей нормальной форме.
Не волнуйтесь, если это звучит сложно; Я обещаю, что по мере прохождения каждого шага это станет яснее.Начнем с 1НФ — первого шага.
Первая нормальная форма (1NF)
Отношение находится в первой нормальной форме (1NF), если (и только если):
- Каждый атрибут содержит только одно значение.
- Все значения атрибутов являются атомарными, что означает, что их нельзя разбить на что-то меньшее.
На практике 1NF означает, что у вас не должно быть списков или других составных структур в качестве значений атрибутов. Ниже приведен пример отношения, не удовлетворяющего критерию 1НФ:
Студенческие курсы
студент | курс |
---|---|
Джейн Смит | Базы данных, математика |
Джон Липинский | Английская литература, базы данных |
Дэйв Бейер | Английская литература, математика |
Этого отношения нет в 1NF, потому что атрибут курсов имеет несколько значений. Джейн Смит назначены два курса (Базы данных и Математика), и они хранятся в одном поле в виде списка, разделенного запятыми. Этот список можно разбить на более мелкие элементы (например, предметы курса: базы данных как один элемент, математика как другой), поэтому это не атомарное значение.
Чтобы преобразовать это отношение в первую нормальную форму, мы должны хранить каждый предмет курса как отдельное значение, чтобы каждое задание студента на курс представляло собой отдельный кортеж:
Студенческие курсы
студент | курс |
---|---|
Джейн Смит | Базы данных |
Джейн Смит | Математика |
Джон Липинский | Английская литература |
Джон Липинский | Базы данных |
Дэйв Бейер | Английская литература |
Дэйв Бейер | Математика |
Если вам интересно узнать больше о первой нормальной форме, я рекомендую статью «Каково действительное определение первой нормальной формы?» моим коллегой Конрадом Здановски.
Вторая нормальная форма (2NF)
Отношение находится в второй нормальной форме (2NF) тогда и только тогда, когда:
- Он находится в 1НФ.
- Никакие непервичные атрибуты функционально не зависят от подмножества ключей-кандидатов. Другими словами, любой столбец, который не является ключевым столбцом, зависит от всей информации в ключевом кандидате .
Что это значит? Если значение атрибута A определяется значением атрибута S, тогда A функционально зависит от S.Например, ваш возраст функционально зависит от даты вашего рождения. Подробнее о функциональных зависимостях см. В этой статье.
Давайте вернемся к идее ключей-кандидатов и непервичных атрибутов. Кто они такие?
- Ключ-кандидат — это минимальный набор атрибутов, который определяет другие атрибуты, включенные в отношение. Он минимален в том смысле, что если вы удалите один атрибут, оставшиеся атрибуты не станут ключом-кандидатом. Для более подробного изучения ключей см. Эту статью.
- Непервичный атрибут — это атрибут, который не является частью ключа-кандидата. Однако, чтобы отношение было 2NF, информация, хранящаяся в непервичных атрибутах, должна быть связана со всей информацией в ключе-кандидате.
Неформально вторая нормальная форма утверждает, что все атрибуты должны зависеть от всего ключа-кандидата .
Давайте посмотрим на пример отношения, которое не удовлетворяет 2NF. Подчеркнутые атрибуты — это возможные ключи.
Склад велосипедных запчастей
часть | поставщик | количество | страна поставщика |
---|---|---|---|
Седло | Bikeraft | 10 | США |
Рычаг тормоза | Tripebike | 5 | Италия |
Верхняя труба | UpBike | 3 | Канада |
Седло | Tripebike | 8 | Италия |
- Ключ-кандидат — это набор часть и поставщик , который выражается следующим образом {часть, поставщик} .
- Непосредственные атрибуты (которые не являются частью ключа кандидата) — это количество и страна-поставщик .
- Существует функциональных зависимостей между часть, поставщик, и количество (выражается как часть, поставщик → количество) и между поставщиком и страной-поставщиком ( выражается как поставщик → страна поставщика) .
Почему это не удовлетворяет 2NF? Набор {часть, поставщик} — единственный ключ-кандидат этого отношения.Значение страны-поставщика функционально зависит от поставщика . Страна-поставщик не является частью ключа-кандидата, поэтому он является непервичным атрибутом и функционально зависит от части ключа-кандидата, а не всего ключа-кандидата {часть, поставщик} .
Чтобы преобразовать это отношение в 2NF, нам необходимо разделить его на два отношения: Детали велосипеда (с атрибутами часть , поставщик и количество ) и Поставщики (с атрибутами поставщик и страна-поставщик ). Это будет выглядеть так:
Велосипедные детали
часть | поставщик | количество |
---|---|---|
Седло | Bikeraft | 10 |
Рычаг тормоза | Tripebike | 5 |
Верхняя труба | UpBike | 3 |
Седло | Tripebike | 8 |
Отношение Запчасти для велосипеда находится в 2NF, потому что, как и раньше, атрибут количества зависит от пары поставщик и часть .
Поставщики
поставщик | страна поставщика |
---|---|
Bikeraft | США |
Tripebike | Италия |
UpBike | Канада |
Отношение Поставщики находится в 2NF, потому что страна-поставщик функционально зависит от поставщика , который является ключом-кандидатом этого отношения.
Давайте посмотрим еще один пример отношения, отличного от 2NF.
Стоимость обучения студентов
студент | курс | класс | стоимость курса |
---|---|---|---|
Элисон Браун | Базы данных | A | $ 100 |
Джейсон Лю | Математика | B | $ 150 |
Мэрайя Хилл | Базы данных | B + | $ 100 |
- Ключ кандидата: {студент, курс}
- Неосновные атрибуты: оценка , стоимость курса
- Функциональные зависимости: s ученик, курс → оценка; курс → стоимость курса
Следующее соотношение не удовлетворяет 2NF.Набор {студент, курс} является ключом кандидата отношения, но значение платы за курс функционально зависит только от курса . Плата за курс — это неосновной атрибут, который функционально зависит только от части ключа кандидата.
Чтобы преобразовать это в 2NF, мы снова разбиваем его на два отношения: Студент, курсы (с атрибутами студент, курс и класс ) и Курсы (с атрибутами курс и плата за курс ).Таким образом, мы избегаем частичной зависимости в указанном выше отношении, отличном от 2NF.
Студенческий курс
студент | курс | класс |
---|---|---|
Элисон Браун | Базы данных | A |
Джейсон Лю | Математика | B |
Мэрайя Хилл | Базы данных | B + |
Курсы
курс | стоимость курса |
---|---|
Базы данных | $ 100 |
Математика | $ 150 |
Почему бы не попробовать самому убедиться, что эти отношения действительно являются 2НФ?
Обратите внимание, что правило частичной зависимости 2NF срабатывает только в том случае, если ваше отношение имеет составной ключ-кандидат (т. е. тот, который состоит из нескольких атрибутов). Все отношения, которые имеют ключ с одним атрибутом, по определению относятся к 2NF.
Третья нормальная форма (3NF)
Отношение находится в третьей нормальной форме (3NF) тогда и только тогда, когда:
- Это вторая нормальная форма (2NF).
- Все непростые атрибуты напрямую (не транзитивно) зависят от всего ключа-кандидата.
Другими словами, непервичные атрибуты должны функционально зависеть от ключа (ключей), но они не должны зависеть от другого непервичного атрибута. 3NF непервичные атрибуты зависят от «ничего, кроме ключа».
Давайте посмотрим на отношение, отличное от 3NF:
Информация для заказа
order_id | дата | клиент | адрес электронной почты клиента |
---|---|---|---|
1/2020 | 2020-01-15 | Джейсон Уайт | white@example. com |
2/2020 | 2020-01-16 | Мэри Смит | msmith @ mailinator.com |
3/3030 | 2020-01-17 | Джейкоб Альбертсон | [email protected] |
4/2020 | 2020-01-18 | Боб Дикинсон | [email protected] |
- Ключ кандидата: order_id
- Непосредственные атрибуты: дата, заказчик, адрес электронной почты заказчика
- Функциональные зависимости: дата зависит от order_id (order_id → date) ; клиент зависит от order_id (order_id → customer) , а адрес электронной почты клиента зависит от клиента (клиент → адрес электронной почты клиента) .
Это соотношение не удовлетворяет 3NF. Единственный ключ-кандидат в этом отношении — order_id . Значение электронной почты клиента функционально зависит от атрибута клиента , который не является основным атрибутом. Таким образом, отношение нарушает 3НФ.
Мы снова разделяем это на два отношения: Заказы (с атрибутами идентификатор заказа , дата и клиент ) и Клиенты (с атрибутами клиент и адрес электронной почты клиента ):
Заказы
order_id | дата | клиент |
---|---|---|
1/2020 | 2020-01-15 | Джейсон Уайт |
2/2020 | 2020-01-16 | Мэри Смит |
3/3030 | 2020-01-17 | Джейкоб Альбертсон |
4/2020 | 2020-01-18 | Боб Дикинсон |
Клиенты
клиент | адрес электронной почты клиента |
---|---|
Джейсон Уайт | белый @ пример. com |
Мэри Смит | [email protected] |
Джейкоб Альбертсон | [email protected] |
Боб Дикинсон | [email protected] |
Заказы находятся в 3NF, поскольку атрибуты даты и клиента не нарушают правило 3NF; их значения зависят от номера order_id . Клиенты находятся в 3NF, потому что электронная почта клиента функционально зависит от клиента , который является ключом-кандидатом в этой связи.В обоих случаях все непервичные атрибуты зависят от ключа-кандидата .
Давайте посмотрим еще на один пример, не относящийся к 3NF.
Курсы
курс | год | учитель | учитель дата рождения |
---|---|---|---|
Базы данных | 2019 | Крис Кейп | 1974-10-12 |
Математика | 2019 | Дэниел Парр | 1985-05-17 |
Базы данных | 2020 | Дженнифер Часы | 1990-06-09 |
- Ключ кандидата: {курс, год}
- Неосновные атрибуты: учитель, учитель дата рождения
- Функциональные зависимости: учитель зависит от курса и года (курс, год → учитель) ; учитель дата рождения зависит от учитель (учитель → дата рождения учителя)
Это соотношение не удовлетворяет 3NF. Единственный ключ-кандидат в этом отношении — {курс, год} , но значение учитель, дата рождения функционально зависит от учитель — неосновной атрибут. Это нарушает 3НФ.
Угадайте, как мы превратим это в 3NF? Верно; мы разделяем отношения. Курсы получают атрибуты курс, год и преподаватель ; Учителя получают атрибуты учитель и учитель дата рождения :
Курсы
курс | год | учитель |
---|---|---|
Базы данных | 2019 | Крис Кейп |
Математика | 2019 | Дэниел Парр |
Базы данных | 2020 | Часы Дженнифер |
Учителя
учитель | учитель дата рождения |
---|---|
Крис Кейп | 1974-10-12 |
Дэниел Парр | 1985-05-17 |
Дженнифер Час | 1990-06-09 |
Попробуйте сами убедиться, что эти отношения действительно находятся в 3NF. Как бы вы объяснили внесенные изменения?
Нормализация базы данных: сводка
Первая, вторая и третья нормальные формы являются основными нормальными формами при нормализации базы данных:
- Первая нормальная форма (1NF) утверждает, что каждый атрибут в отношении является атомарным.
- Вторая нормальная форма (2NF) утверждает, что непервичные атрибуты должны функционально зависеть от всего ключа-кандидата.
- Третья нормальная форма (3NF) утверждает, что непервичные атрибуты должны быть напрямую (нетранзитивно) зависимыми от ключей-кандидатов.
Следите за обновлениями нашего блога, чтобы увидеть больше статей о нормализации базы данных!
. Разное