Нормализация базы данных

редактировать

Уменьшение избыточности данных

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

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

Содержание
  • 1 Цели
    • 1.1 Минимизация редизайна при расширении структуры базы данных
    • 1.2 Пример
  • 2 Нормальные формы
  • 3 Пример пошаговой нормализации
    • 3.1 Исходные данные
    • 3.2 Удовлетворение 1NF
    • 3.3 Удовлетворение 2NF
    • 3.4 Удовлетворение EKNF
    • 3.5 Удовлетворение 4NF
    • 3.6 Удовлетворение ETNF
    • 3.7 Удовлетворение 5NF
    • 3.8 Удовлетворение DKNF
    • 3.9 Удовлетворение 6NF
  • 4 См. Также
  • 5 Примечания и ссылки
  • 6 Дополнительная литература
  • 7 Внешние ссылки
Цели

Основная цель первой нормальной формы, определенной Коддом в 1970 году, заключалась в том, чтобы позволить данным быть запрашиваются и обрабатываются с использованием «универсального подъязыка данных», основанного на логике первого порядка. (SQL является примером такого подъязыка данных, хотя Кодд считал его серьезно несовершенным.)

Цели нормализации за пределами 1NF (первая нормальная форма) были сформулированы следующим образом от Кодда:

  1. Чтобы освободить коллекцию отношений от нежелательных зависимостей вставки, обновления и удаления.
  2. Чтобы уменьшить потребность в реструктуризации коллекции отношений по мере появления новых типов данных и, таким образом, увеличить продолжительность жизни прикладных программ.
  3. Чтобы сделать реляционную модель более информативной для пользователей.
  4. Чтобы сделать набор отношений нейтральным по отношению к статистике запросов, где эта статистика может меняться с течением времени автор.
— EF Кодд, «Дальнейшая нормализация реляционной модели базы данных» Аномалия обновления . Сотрудник 519 показан как имеющий разные адреса в разных записях. Аномалия вставки . Пока новому преподавателю, доктору Ньюсому, не будет поручено вести хотя бы один курс, его или ее данные не могут быть записаны. A аномалия удаления . Вся информация о докторе Гидденсе теряется, если он или она временно перестают назначаться на какие-либо курсы.

Когда делается попытка изменить (обновить, вставить или удалить) связь, возникают следующие нежелательные побочные эффекты могут возникнуть в отношениях, которые не были достаточно нормализованы:

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

Минимизация изменения дизайна при расширении структуры базы данных

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

Нормализованные отношения и отношения между одним нормализованным отношением и другим отражают концепции реального мира и их взаимосвязи.

Пример

Запрос и обработка данных в структуре данных, которая не нормализована, например, следующее не-1NF представление транзакций по кредитным картам клиентов, сопряжено с большей сложностью, чем это действительно необходимо:

ЗаказчикЗаказчик. IDТранзакции
Авраам1
Тр. IDДатаСумма
1289014 октября 2003 г.−87
1290415- Октябрь 2003 г.-50
Исаак2
Тр. IDДатаСумма
1289814 октября 2003 г.−21
Джейкоб3
Тр. IDДатаСумма
1290715 октября 2003 г.−18
1492020- Ноябрь 2003 г.-70
1500327 ноября 2003 г.-60

. Каждому покупателю соответствует «повторяющаяся группа» транзакций. Следовательно, автоматическая оценка любого запроса, относящегося к транзакциям клиентов, в целом будет включать в себя два этапа:

  1. Распаковка одной или нескольких групп транзакций клиентов, позволяющая исследовать отдельные транзакции в группе, и
  2. Получение результата запроса на основе результатов первого этапа

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

Одним из важных выводов Кодда было то, что структурная сложность может быть уменьшена. Уменьшение структурной сложности дает пользователям, приложениям и СУБД больше возможностей и гибкости для формулирования и оценки запросов. Более нормализованный эквивалент приведенной выше структуры может выглядеть так:

CustomerCust. ID
Авраам1
Исаак2
Иаков3
Каст. IDТр. IDДатаСумма
11289014-Oct-2003−87
11290415- Октябрь 2003 г.−50
21289814- окт.2003−21
31290715 октября 2003 г.−18
31492020- ноябрь 2003−70
31500327 ноября 2003 года−60

В измененной структуре первичный ключ равен {Cust. ID} в первом отношении, {Cust. ID, Тр. ID} во втором отношении.

Теперь каждая строка представляет отдельную транзакцию по кредитной карте, и СУБД может получить интересующий ответ, просто найдя все строки с датой, приходящейся на октябрь, и суммируя их суммы. Структура данных размещает все значения на равных основаниях, открывая каждое из них напрямую СУБД, поэтому каждое потенциально может напрямую участвовать в запросах; тогда как в предыдущей ситуации некоторые значения были встроены в структуры нижнего уровня, с которыми нужно было обрабатывать специально. Соответственно, нормализованный дизайн подходит для обработки запросов общего назначения, а ненормализованный - нет. Нормализованная версия также позволяет пользователю изменить имя клиента в одном месте и защищает от ошибок, которые возникают, если имя клиента неправильно написано в некоторых записях.

Нормальные формы

Кодд представил концепцию нормализации и то, что сейчас известно как первая нормальная форма (1NF) в 1970 году. Кодд продолжил определение вторая нормальная форма (2NF) и третья нормальная форма (3NF) в 1971 году, а Кодд и Раймонд Ф. Бойс определили нормальную форму Бойса-Кодда (BCNF) в 1974 году.

Неформально отношение реляционной базы данных часто описывается как «нормализованное», если оно соответствует третьей нормальной форме. Большинство отношений 3NF не содержат аномалий вставки, обновления и удаления.

Нормальные формы (от наименее нормализованной до наиболее нормализованной):

UNF. (1970)1NF. (1970)2NF. (1971)3NF. (1971)EKNF. (1982)BCNF. (1974)4NF. (1977). (2012)5NF. (1979)DKNF. (1981)6NF. (2003)
Первичный ключ (без повторяющихся кортежей )Может быть Да Да Да Да Да Да Да Да Да Да
Без повторяющихся группМожет быть Да Да Да Да Да Да Да Да Да Да
Атомарные столбцы (ячейки имеют одно значение)Нет Да Да Да Да Да Да Да Да Да Да
Каждая нетривиальная функциональная зависимость либо не начинается с правильного подмножества ключа-кандидата, либо заканчивается простым атрибут (частичные функциональные зависимости не примитивных e атрибутов ключей-кандидатов)Нет Нет Да Да Да Да Да Да Да Да Да
Каждая нетривиальная функциональная зависимость начинается с суперключа или заканчивается первичным атрибутом (нет транзитивных функциональных зависимостей непервичных атрибутов для ключей-кандидатов)Нет Нет Нет Да Да Да Да Да Да Да Да
Каждая нетривиальная функциональная зависимость либо начинается с суперключа, либо заканчивается элементарным первичным атрибутом Нет Нет Нет Нет Да Да Да Да Да Да Н / Д
Каждая нетривиальная функциональная зависимость начинается с суперключаНет Нет Нет Нет Нет Да Да Да Да Да Н / Д
Каждая нетривиальная многозначная зависимость начинается с суперключаНет Нет Нет Нет Нет Нет Да Да Да Да Н / Д
Каждая зависимость соединения имеет компонент суперключаНет Нет Нет Нет Нет Нет Нет Да Да Да Н / Д
Каждая зависимость соединения имеет только компоненты суперключаНет Нет Нет Нет Нет Нет Нет Нет Да Да Н / Д
Каждое ограничение является следствием ограничений домена и ключевых ограниченийНет Нет Нет Нет Нет Нет Нет Нет Нет Да Н / Д
Каждая зависимость соединения тривиальнаНет Нет Нет Нет Нет Нет Нет Нет Нет Нет Да
Пример пошагового описания нормализация

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

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

Однако стоит отметить, что нормальные формы за пределами 4NF представляют в основном академический интерес, поскольку проблемы, которые они существуют, решаются редко появляются на практике.

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

Исходные данные

Пусть таблица базы данных имеет следующую структуру:

ЗаголовокАвторНациональность органаФорматЦенаТемаСтраницыТолщинаИздательСтрана издателяТип публикацииID жанраНазвание жанра
Начало проектирования и оптимизации базы данных MySQLЧад РасселАмериканскийТвердый переплет49,99MySQL,

База данных,

Дизайн

520ТолстыйApressСШАЭлектронная книга1Учебник

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

Удовлетворение 1NF

Чтобы удовлетворить 1NF, значения в каждом столбце таблицы должны быть атомарными. В исходной таблице Subject содержит набор значений темы, что означает, что он не соответствует.

Одним из способов достижения 1NF было бы разделение дубликатов на несколько столбцов с помощью повторяющихся групп Тема :

НазваниеФорматАвторНациональность автораЦенаТема 1Тема 2Тема 3СтраницыТолщинаИздательСтрана издателяИдентификатор жанраНазвание жанра
Начало проектирования и оптимизации базы данных MySQLТвердый переплетЧад РасселАмериканский49,99MySQLБаза данныхДизайн520ТолстыйApressUSA1Учебник

Хотя теперь таблица формально соответствует 1NF (атомарная), проблема с этим решением очевидна - если в книге более трех предметов, она нельзя добавить в базу данных без изменения ее структуры.

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

Книга
НазваниеФорматАвторАвтор НациональностьЦенаСтраницыТолщинаИдентификатор жанраНазвание жанраИдентификатор издателя
Начало проектирования и оптимизации базы данных MySQLТвердый переплетЧад РасселАмериканец49,99520Толстый1Учебник1
Тема
Идентификатор темыИмя субъекта
1MySQL
2База данных
3Дизайн
Издатель
Идентификатор_издателяИмяСтрана
1ApressUSA

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

Книга может соответствовать многим предметам, так же как предмет может соответствовать многим книгам. Это означает, что также необходимо определить отношение многие-ко-многим, что достигается путем создания таблицы ссылок :

Заголовок - Субъект
ЗаголовокИдентификатор объекта
Начало MySQL Разработка и оптимизация базы данных1
Начало проектирования и оптимизации базы данных MySQL2
Начало проектирования и оптимизации базы данных MySQL3

.

Вместо одной таблицы в ненормализованной форме теперь есть 4 таблицы, соответствующие 1NF.

Удовлетворение 2NF

Таблица Книга имеет один ключ-кандидат (который, следовательно, является первичным ключом ), составной ключ {Заголовок, Формат} . Рассмотрим следующий фрагмент таблицы:

Книга
НазваниеФорматАвторАвтор НациональностьЦенаСтраницТолщинаID жанраНазвание жанраID издателя
Начало проектирования и оптимизации базы данных MySQLТвердый переплетChad RussellАмериканский49,99520Толстый1Учебное пособие1
Начало проектирования и оптимизации баз данных MySQLЭлектронная книгаЧад РасселАмериканец22.34520Толстый1Учебник1
Реляционная модель для управления базами данных: версия 2Электронная книгаEFCoddБританский13,88538Толстый2Популярный science2
Реляционная модель для управления базами данных: версия 2Мягкая обложкаEFCoddБританский39,99538Толстый2Научно-популярный2

Все атрибуты, которые не являются частью ключа кандидата, зависят от Заголовка, но Ly Цена также зависит от формата. Чтобы соответствовать 2NF и устранить дублирование, каждый атрибут, не являющийся ключом-кандидатом, должен зависеть от всего ключа-кандидата, а не только от его части.

Чтобы нормализовать эту таблицу, сделайте {Title} (простым) кандидатным ключом (первичным ключом) так, чтобы каждый атрибут не-кандидата-ключа зависел от всего кандидата-ключа, и удалите Price в отдельную таблицу, чтобы сохранить ее зависимость от формата:

Книга
НазваниеАвторАвтор НациональностьСтраницыТолщинаИдентификатор жанраНазвание жанраИдентификатор издателя
Начало разработки и оптимизации базы данных MySQLЧад РасселАмериканец520Толстый1Учебное пособие1
Реляционная модель для управления базами данных: версия 2EFCoddБританский538Толстый2Научно-популярный2
Формат - Цена
НазваниеФорматЦена
Начало проектирования и оптимизации базы данных MySQLТвердый переплет49.99
Начало проектирования и оптимизации базы данных MySQLЭлектронная книга22.34
Реляционная модель для управления базами данных: версия 2Электронная книга13.88
Реляционная модель для управления базами данных: версия 2Мягкая обложка39.99

Теперь таблица Book соответствует 2NF.

Удовлетворение EKNF

Нормальная форма элементарного ключа (EKNF) находится строго между 3NF и BCNF и мало обсуждается в литературе. Он призван «уловить основные качества как 3NF, так и BCNF», избегая при этом проблем обоих (а именно, что 3NF «слишком снисходительна», а BCNF «склонна к вычислительной сложности»). Поскольку он редко упоминается в литературе, он не включен в этот пример.

Удовлетворение 4NF

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

Франчайзи - Местоположение книги
Идентификатор франчайзиЗаголовокМестоположение
1Начало проектирования и оптимизации базы данных MySQLКалифорния
1Начало проектирования и оптимизации базы данных MySQLФлорида
1Начало проектирования и оптимизации базы данных MySQLТехас
1Реляционная модель для управления базами данных: версия 2Калифорния
1Реляционная модель для управления базами данных: версия 2Флорида
1Реляционная модель для управления базами данных: версия 2Техас
2Начало Разработка и оптимизация базы данных MySQLКалифорния
2Начало проектирования и оптимизации базы данных MySQLФлорида
2Начало проектирования и оптимизации базы данных MySQLТехас
2Реляционная модель для управления базами данных: версия 2Калифорния
2Реляционная модель для управления базами данных: версия 2Флорида
2Реляционная модель для управления базами данных: версия 2Техас
3Начало проектирования и оптимизации баз данных MySQLТехас

Как эта структура таблицы состоит из составного первичного ключа , он не содержит никаких неключевых атрибутов и уже находится в BCNF (и, следовательно, также удовлетворяет всем предыдущим нормальным формам ). Однако, если мы предположим, что все доступные книги предлагаются в каждой области, мы можем заметить, что Title не привязан однозначно к определенному Location, и поэтому таблица не удовлетворяет 4NF.

Это означает, что для удовлетворения четвертой нормальной формы эту таблицу также необходимо разложить:

Франчайзи - Книга
Идентификатор франчайзиЗаголовок
1Начало проектирования и оптимизации базы данных MySQL
1Реляционная модель для управления базой данных: версия 2
2Начало проектирования и оптимизации базы данных MySQL
2Реляционная модель для управления базой данных: версия 2
3Начало проектирования и оптимизации базы данных MySQL
Франчайзи - Местоположение
Идентификатор франчайзиМестоположение
1Калифорния
1Флорида
1Техас
2Калифорния
2Флорида
2Техас
3Техас

Итак, каждая запись однозначно идентифицируется с помощью суперключа, следовательно, 4NF удовлетворяется.

Удовлетворение ETNF

Предположим, франчайзи также могут заказывать книги из diff Текущие поставщики. Пусть отношение также подчиняется следующему ограничению:

  • Если определенный поставщик предоставляет определенный title
  • и title предоставляется франчайзи
  • и франчайзи поставляются поставщиком,
  • затем поставщик передает титул франчайзи .
Поставщик - Книга - Франчайзи
Идентификатор поставщикаЗаголовокИдентификатор франчайзи
1Начало проектирования и оптимизации базы данных MySQL1
2Реляционная модель для управления базой данных: версия 22
3Изучение SQL3

Эта таблица находится в 4NF, но ID поставщика равен объединению его прогнозов: {{Supplier ID, Book}, {Book, Franchisee ID}, {Franchisee ID, Supplier ID }}. Ни один из компонентов этой зависимости соединения не является суперключом (единственный суперключ представляет собой весь заголовок), поэтому таблица не удовлетворяет требованиям и может быть дополнительно разложена:

Поставщик - Книга
Идентификатор поставщикаЗаголовок
1Начало проектирования и оптимизации базы данных MySQL
2Реляционная модель для управления базами данных: версия 2
3Изучение SQL
Книга - франчайзи
НазваниеID франчайзи
Начало проектирования и оптимизации базы данных MySQL1
Реляционная модель для управления базами данных: версия 22
Изучение SQL3
Франчайзи - Поставщик
Идентификатор поставщикаИдентификатор франчайзи
11
22
33

Разложение обеспечивает соответствие.

Соответствие 5NF

Чтобы определить таблицу, не удовлетворяющую 5NF, обычно необходимо тщательно изучить данные. Предположим, что таблица из 4NF, пример с небольшими изменениями в данных, и давайте посмотрим, удовлетворяет ли она 5NF :

Franchisee - Book Location
Franchisee IDTitleLocation
1Начало проектирования и оптимизации базы данных MySQLКалифорния
1Изучение SQLКалифорния
1Реляционная модель для управления базами данных: версия 2Техас
2Реляционная Модель для управления базой данных: версия 2Калифорния

Если мы разложим эту таблицу, мы уменьшим избыточность и получим следующие две таблицы:

Франчайзи - Книга
Идентификатор франчайзиНазвание
1Начало проектирования и оптимизации базы данных MySQL
1Изучение SQL
1Реляционная модель для управления базой данных: версия 2
2Реляционная модель для управления базой данных: версия 2
Франчайзи - местонахождение
идентификатор франчайзиМестоположение
1Калифорния
1Техас
2Калифорния

Что произойдет, если мы попытаемся объединить эти таблицы? Запрос вернет следующие данные:

Франчайзи - Книга - Местоположение ПРИСОЕДИНЕНО
Идентификатор франчайзиНазваниеМестоположение
1Начало проектирования и оптимизации базы данных MySQLКалифорния
1Обучение SQLКалифорния
1Реляционная модель для управления базами данных: версия 2Калифорния
1Реляционная модель для управления базами данных: версия 2Техас
1Обучение SQLТехас
1Начало проектирования и оптимизации базы данных MySQLТехас
2Реляционная модель для управления базами данных: версия 2Калифорния

Очевидно, JOIN возвращает на три строки больше, чем нужно - давайте попробуем добавить еще одну таблицу, чтобы прояснить связь. В итоге мы получаем три отдельные таблицы:.

Франчайзи - Книга
Идентификатор франчайзиЗаголовок
1Начало проектирования и оптимизации базы данных MySQL
1Изучение SQL
1Реляционная модель для управления базами данных: версия 2
2Реляционная модель для управления базами данных: Версия 2
Франчайзи - Местоположение
Идентификатор франчайзиМестоположение
1Калифорния
1Техас
2Калифорния
Местоположение - Книга
МестоположениеЗаголовок
КалифорнияНачало проектирования и оптимизации базы данных MySQL
КалифорнияИзучение SQL
КалифорнияРеляционная модель для управления базами данных: версия 2
ТехасРеляционная модель для управления базами данных: версия 2

Что теперь будет возвращать JOIN? Фактически невозможно объединить эти три таблицы. Это означает, что невозможно было разложить Франчайзи - Местоположение книги без потери данных, поэтому таблица уже удовлетворяет 5NF.

C.J. Дейт утверждал, что только база данных в 5NF действительно "нормализована".

Удовлетворение DKNF

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

Книга
ЗаголовокСтраницыТолщинаИдентификатор жанраИдентификатор издателя
Начало проектирования базы данных MySQL и Оптимизация520Толстый11
Реляционная модель для управления базами данных: Версия 2538Толстый22
Изучение SQL338Slim13
Поваренная книга SQL636Thick13

Логически Толщина определяется количеством страниц. Это означает, что это зависит от страниц, которые не являются ключевыми. Приведем пример соглашения, согласно которому книга до 350 страниц считается «тонкой», а книга более 350 страниц - «толстой».

Это соглашение технически является ограничением, но не является ни ограничением домена, ни ограничением ключа; поэтому мы не можем полагаться на ограничения домена и ключевые ограничения для сохранения целостности данных.

Другими словами - ничто не мешает нам поставить, например, «Толстый» для книги всего с 50 страницами - и это нарушает таблицу DKNF.

Чтобы решить эту проблему, мы можем создать таблица, содержащая перечисление, которое определяет Thickness и удаляет этот столбец из исходной таблицы:

Thickness Enum
ThicknessMin pagesMax Pages
Slim1350
Толстый351999,999,999,999
Книга - Страницы - Жанр - Издатель
НазваниеСтраницыИдентификатор жанраИдентификатор издателя
Начало проектирования и оптимизации базы данных MySQL52011
Реляционная модель для управления базой данных: версия 253822
Изучение SQL33813
Поваренная книга SQL63613

Таким образом, нарушение целостности домена было устранено, и таблица находится в DKNF.

Satisfying 6NF

Простое и интуитивно понятное определение шестой нормальной формы состоит в том, что «таблица находится в 6NF, когда строка содержит первичный ключ, и не более одного другого атрибута ".

Это означает, например, что таблица Publisher, созданная при создании 1NF

Publisher
Publisher_IDИмяСтрана
1ApressСША

необходимо дополнительно разложить на две таблицы:

Publisher
Publisher_IDName
1Apress
Страна издателя
Publisher_IDСтрана
1США

Очевидным недостатком 6NF является большое количество таблиц, необходимых для представления информации об одном объекте. Если таблица в 5NF имеет один столбец первичного ключа и N атрибутов, для представления той же информации в 6NF потребуется N таблиц; обновления нескольких полей одной концептуальной записи потребуют обновления нескольких таблиц; а вставки и удаления аналогичным образом потребуют операций над несколькими таблицами. По этой причине в базах данных, предназначенных для обслуживания нужд онлайн-обработки транзакций, не следует использовать 6NF.

Однако в хранилищах данных, которые не допускают интерактивных обновлений и которые предназначены для быстрого запроса больших объемов данных, некоторые СУБД используют внутреннее представление 6NF, известное как Столбцовое хранилище данных. В ситуациях, когда количество уникальных значений столбца намного меньше количества строк в таблице, хранение, ориентированное на столбцы, позволяет значительно сэкономить пространство за счет сжатия данных. Столбцовое хранилище также позволяет быстро выполнять запросы диапазона (например, отображать все записи, в которых конкретный столбец находится между X и Y или меньше X.)

Однако во всех этих случаях разработчик базы данных не имеет выполнить нормализацию 6НФ вручную, создав отдельные таблицы. Некоторые СУБД, специализирующиеся на хранении данных, такие как Sybase IQ, по умолчанию используют столбчатое хранилище, но разработчик по-прежнему видит только одну таблицу с несколькими столбцами. Другие СУБД, такие как Microsoft SQL Server 2012 и более поздние версии, позволяют вам указать "индекс columnstore" для конкретной таблицы.

См. Также
Примечания и ссылки
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-05-17 14:12:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте