дизайн - шестая нормальная форма - PullRequest
6 голосов
/ 24 сентября 2011

У меня есть следующие таблицы:

Blogs { BlogName }
BlogPosts { BlogName, PostTitle }

Сообщения блога одновременно моделируют сущность и отношения, которые недопустимы в соответствии с 6nf (согласно третьему манифесту).

В 6nf это будет:

Blogs { BlogName }
Posts { PostTitle }
BlogPosts { BlogName, PostTitle}

Если бы я хотел упорядочить записи в блоге по последовательности nbr (просто пример), это была бы другая таблица

BlogPostsSorting { BlogName, PostTitle , SortOrder }

Должен ли яправильно ли это?

Ответы [ 2 ]

6 голосов
/ 24 сентября 2011

Каковы ключи ваших таблиц?Исходя из имен столбцов, я предполагаю, что ключом BlogPosts может быть только {BlogName, PostTitle}.В этом случае BlogPosts уже находится в 6NF - он не имеет неосновных атрибутов и поэтому не может быть разложен без потерь.Блоги relvar и Posts relvar были бы излишними - они вам не нужны.

Сообщения в блогах моделируют сущность и отношения одновременно, что недопустимо в соответствии с 6nf (согласно третьемуманифест)

Можете ли вы сказать мне, где, по вашему мнению, в Третьем манифесте говорится, что это неверно?Я уверен, что это не так, но я хотел бы знать, как вы пришли к такому выводу.

4 голосов
/ 25 сентября 2011

sqlvogel является правильным в этом ответе .

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

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

Необходим ли вам Relvar SortingOrder в качестве дополнительного, зависит от того, могут ли быть BlogPosts, для которых не требуется порядок сортировки.Если нет, тогда ваш SortingOrder relvar просто заменяет BlogPosts.Если есть, то вы можете получить два relvars;или, в качестве альтернативы, вы все равно можете просто использовать relvar SortingOrder и взламывать случай постов без упорядочения, используя фиктивное значение (например, всегда -1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...