В какой Высшей нормальной форме находится эта таблица?


Ticket Vname Nname
1      Oli   Seitz
1      Andi  Hofmann
2      Oli   Seitz
2      Oli   Schmidt
2      Tim   Schmidt
3      Tim   Hofmann
Эта таблица представляет собой отображение лиц (Vname, Nname) и билетов (Ticket). Vname и Nname вместе идентифицируют человека, но у каждого человека (Vname, Nname) может быть несколько билетов (Ticket), и билет может быть назначен нескольким людям.

PK в этой таблице - это все три столбца вместе. Поэтому эта таблица должна быть 1NF, потому что в одном столбце нет многомерных данных.

Но потом я борюсь. Я думаю, что это 2NF и 3NF, потому что я не могу найти никаких функциональных зависимостей. (Надеюсь, что они называются функциональными как в английском, так и в немецком языках) Может ли кто-нибудь объяснить, какой самый высокий NF эта таблица и почему? И что мне придется изменить, чтобы сделать это в 5NF? Примечание: это не домашнее задание, этот вопрос возник в результате обсуждения.
2 2

2 ответа:

1NF (первая нормальная форма)

"1NF" не имеет стандартного значения.

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

Нормализация к высшим НФ (нормальным формам)

Единственное, что нормализация к более высоким NFs имеет отношение к "1NF", это то, что они являются оба пытаются упростить, чтобы улучшить дизайн.

Ваше отношение не удовлетворяет никаким нетривиальным FDs (функциональным зависимостям). Так и в BCNF . Ваше отношение не удовлетворяет никаким нетривиальным MVDs (многозначным зависимостям). Т. е. он не удовлетворяет нетривиальный двоичный предоставлению стипендий для подготовки кадров (присоединение к зависимости). То есть это не соединение членов какой-либо пары его проекций, кроме пары, которая включает в себя саму себя. Так и в 4NF . Вы можете увидеть это, взяв пары проекций и соединив их их. Вы также можете сделать это, применяя определения FD и MVD и идентифицируя их, а затем применяя правила вывода для них.

Ваше отношение удовлетворяет нетривиальному JD *{{Ticket, Vname}, {Vname, Nname}, {Ticket, Nname}}. Таким образом, это соединение членов множества его проекций, отличных от множества, которое включает в себя само себя. Но это JD не подразумевается его CKs. То есть нет цепочки соединений его проекций, где общие атрибуты каждого соединения включают в себя CK оригинала. Так что это не в 5NF . Вы можете видеть это беря наборы проекций и соединяя их. Не существует алгоритма для определения того, какой нетривиальной JDs отношение удовлетворяет со сложностью лучше, чем грубая сила.

Отношение Значения / Предикаты

С другой стороны, предположим, что вызнали значение отношения в той мере, в какой вы знали, что оно содержит кортежи, которые делают истинное утверждение из(характерного) предиката выразимым как соединение других, скажем
    ticket Ticket was submitted by a person with first name Vname
AND there is a person with name Vname Nname
AND ticket Ticket was submitted by a person with last name Nname

Join is спроектировано так, что предикатом его выходных данных является и предикатов его входных данных. Таким образом, вы будете знать, чтобы проверить, удовлетворяют ли любые соответствующие разложения оригинала JD (то есть являются ли отношения из конъюнктов проекциями оригинала), и таким образом проверить, подразумевается ли JD CKS оригинала.

Точка нормализации для более высоких NFs состоит в том, что JD имеет место, когда предикат отношения может быть выражен как соединение других и их отношения являются проекциями оригинала, поэтому мы можем использовать более простые отдельные отношения вместо этого, за исключением того, что мы могли бы также соединить / и отношения / предикаты на попарно разделяемых CKs, потому что все еще нет аномалий обновления. (Если FD {x, ...} -> a имеет место, то некоторый MVD имеет место и некоторый бинарный JD имеет место, и предикат отношения может быть выражен как ... AND a = f(x, ...).)

Заметим, что вопреки утверждениям о том, что 5NF должен уменьшать аномалии обновления, оказалось, что они исчезают по мере ETNF, который лежит между BCNF и 5NF. Но дизайн 5NF все еще проще в том смысле, что существует меньше отношений за счет добавления ANDs к предикатам. Обратите внимание, что mvds и JDs, которые удерживаются, трудно найти только потому, что конструкции с ними интуитивно очевидно плохи, поэтому они никогда не предлагаются, потому что их предикаты являются конъюнкцией других. Таким образом, вопреки утверждениям, что 5NF не имеет значения, потому что нарушения JDs редки, 5NF является единственным NF, который имеет значение. (Системы SQL не поддерживают работу с все ограничения целостности, которые могут возникнуть из конструкций 5NF, так что и незнание приводит к утверждениям, что следует довольствоваться 3NF.)

Вам нужно найти определения NFs и , почему они имеют значение.

Еще предикаты reи реляционная модель .

(Я только ответил на этот вопрос, потому что полученная мудрость, даже в учебниках, - это такой беспорядок.)

Приложение

Проекции и соединения. (Я уже собирался уходить. минимальный, полный и проверяемый пример для вас. Но удержание JD оспаривалось другим ответчиком, так что вот sqlfiddle.)

T
1      Oli   Seitz
1      Andi  Hofmann
2      Oli   Seitz
2      Oli   Schmidt
2      Tim   Schmidt
3      Tim   Hofmann

project Ticket, Vname (T)
1      Oli
1      Andi
2      Oli
2      Tim
3      Tim

project Vname, Nname (T)
Oli   Seitz
Andi  Hofmann
Oli   Schmidt
Tim   Schmidt
Tim   Hofmann

project Ticket, Vname (T) join project Vname, Nname (T)
1      Oli   Seitz
1      Oli   Schmidt
1      Andi  Hofmann
2      Oli   Seitz
2      Oli   Schmidt
2      Tim   Schmidt
2      Tim   Hofmann
3      Tim   Schmidt
3      Tim   Hofmann

project Ticket, Nname (T)
1      Seitz
1      Hofmann
2      Seitz
2      Schmidt
3      Hofmann

     project Ticket, Vname (T) join project Vname, Nname (T)
join project Ticket, Nname (T)
1      Oli   Seitz
1      Andi  Hofmann
2      Oli   Seitz
2      Oli   Schmidt
2      Tim   Schmidt
3      Tim   Hofmann

Предикат:

[p1] человеку по имени (FirstName) (фамилия) присваивается номер билета (Ticket).

Ограничения:

  • (c1.1) личность идентифицируется по имени и фамилии.
  • (c1.2) билет идентифицируется по номеру билета.
  • (c1.3) для каждого человека этому человеку может быть присвоено более одного билета.
  • (c1.4) для каждого билета этот билет может быть назначен более чем одному человек.
PersonTicket {FirstName, LastName, Ticket}
         KEY {FirstName, LastName, Ticket}

НФ рассуждения:

    Таблица является полностью ключевой, следовательно, она находится в BCNF.
  1. это в BCNF, нельзя уменьшить избыточность декомпозицией, следовательно, это в 5-м NF.
  2. он находится в 5-м NF и всех ключах, следовательно, он находится в 6-м NF.

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

Также заметим, что предикат [p1] является простым предикатом, он обобщает простые (элементарные) факты, что является предикативным признаком 6-го НФ. Например, факт " Person named Oli Seitz is assigned ticket number 1." нельзя разделить на два предложения без потери информации.


EDIT

Это была долгая дискуссия (см. комментарии), поэтому я должен немного расширить ответ. Моя основная предпосылка состоит в том, что таблица {Ticket, Vname, Nname} не может быть разложена на проекции, или технически говоря, которые присоединяют зависимость:
JD *{{Ticket, Vname}, {Vname, Nname}, {Ticket, Nname}}

не удерживает. (Примечание: Vname = имя, Nname =фамилия).

Так что давайте внимательнее посмотрим на это. Что бы это значило для JD, чтобы удержаться? JD можно вербализовать следующим образом:

Если лицу с именем присваивается номер билета и a человеку с фамилией присваивается номер билета и там же. существует человек с таким именем и фамилией. эта фамилия , затем , что человеку с таким именем и фамилией присваивается этот билет число .

Когда вы впервые читаете это, это может показаться правильным, - на минуту или две, - но это просто неправильно.

Взгляните на пример:

     Original       |             Three Projections
                    |
(T,  First,  Last ) | (T, First)  (First,   Last )  (T,   Last )
----------------------------------------------------------------- 
(1, 'Tom', '.....') | (1, 'Tom')  ('Tom', '.....')  (1, '.....')
(1, '...', 'Jones') | (1, '...')  ('...', 'Jones')  (1, 'Jones')
(2, 'Tom', 'Jones') | (2, 'Tom')  ('Tom', 'Jones')  (2, 'Jones')

Обратите внимание, что соединение кортежей

(1, 'Tom) ('Tom', 'Jones') (1, 'Jones')

Создает дополнительный кортеж

(1, 'Tom', 'Jones')

Которого нет в оригинале; следовательно, JD не содержит.

Чтобы поставить его условно, идентификатор человека (First, Last) разделен. Итак, имя и фамилия человека действуют независимо друг от друга; серьезная логическая ошибка.

Похоже, что образцы данных в исходном вопросе были тщательно обработаны, чтобы показать, что JD держит; исходный образец данных пройдет этот тест. Однако вставьте только один кортеж (строку) в исходную таблицу:

(1, 'Tim',  'Seitz')

Теперь снова тест, этот генерирует два дополнительных кортежа при соединении проекции:

(1, 'Tim', 'Hofmann')
(2, 'Tim', 'Seitz')

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

Интересно, что эти нечеткие, расплывчатые, бессмысленные и т. д. термины приводят к правильному результату, в отличие от " точного, высокотехничного, (алгоритм помог ?)" метод, который может привести к серьезным логическим ошибкам . Итак, для тех, кто хотел бы поближе познакомиться с этими-ИМХО чрезвычайно полезными и практичными-терминами, я могу предложить несколько ссылок.

[1] О простых предикатах и 6-й НФ :

C. J. Date; проектирование баз данных и реляционная теория;
Часть III, Глава 13, шестая нормальная форма

[2] О элементарном факты :

Терри Халпин, Тони Морган; Информационное моделирование и реляционные базы данных;
Глава 3, Концептуальное Моделирование: Первые Шаги Терри Халпин, что такое элементарный факт?, бумага 1993.

[3] О 5-й НФ и уменьшении избыточности :

"сказать, что relvar R находится в 5-м NF, значит сказать дальнейшее отсутствие потерь разложение R на проекции может быть возможным, но не будет исключите любые повторы. "

"5NF гарантирует свободу от избыточности, которая может быть устранена с помощью проекция. "

C. J. Date; мастер-класс (видео): проектирование баз данных и реляционная теория;
Нормализация JDs и 5NF (формальная) - часть 2 из 2

[4] О предикатах и предложениях :

Часть I, Глава 2, предикаты и предложения
Часть V, Глава 15, проектирование базы данных - это проектирование предикатов
в : С. J. дата; проектирование баз данных и реляционная теория.

"концептуально база данных представляет собой набор предложений, выражающих предположения, принятые за истинные для UoD."

Терри Халпин, Тони Морган; Информационное моделирование и реляционные базы данных;
Глава 2, информационные уровни и структуры