Это дизайн в 5NF? - PullRequest
       1

Это дизайн в 5NF?

0 голосов
/ 29 сентября 2011

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

enter image description here

При удалении group_blog_post также должна быть удалена нижележащая строка blog_posts, лучше ли это сделать с помощью триггера?

1 Ответ

1 голос
/ 04 октября 2011

Чтобы таблица была в 5NF, сначала она должна быть в 4NF. Чтобы быть в 4NF, сначала он должен быть в 3NF. И так далее, вплоть до 1NF.

Грубо говоря, нижние нормальные формы связаны с зависимостями между ключами-кандидатами и непростыми атрибутами. Но единственные непростые атрибуты, которые мы можем видеть, это "title" и "is_private". Так что на самом деле нет никакого способа сказать.

Чтобы взять одну таблицу в качестве примера, "group_users" находится в 5NF, если у него нет других столбцов.

Позже

Если вы расширите таблицу group_users, как это

create table group_users (
  group_id integer not null references groups (group_id),
  user_id integer not null refrences users (user_id),
  user_type_id integer not null references user_types (user_type_id),
  primary key (group_id, user_id)
);

тогда вы все еще в 5NF. Столбец "user_type_id" не зависит только от user_id - если бы это было так, вы бы не были в 2NF. Но user_type_id не является атрибутом только пользователя; это атрибут пользователя в этой конкретной группе . Нет частичных ключевых зависимостей; нет переходных зависимостей; нет независимых, многозначных фактов; нет зависимостей соединения; так что в 5NF.

Эта структура допускает использование только одного user_type_id для каждого пользователя в группе. Если вы думаете, что у пользователей должно быть несколько типов пользователей в каждой группе, то это

create table group_users (
  group_id integer not null references groups (group_id),
  user_id integer not null refrences users (user_id),
  user_type_id integer not null references user_types (user_type_id),
  primary key (group_id, user_id, user_type_id)
);

равно и в 5NF. Нет частичных ключевых зависимостей; нет переходных зависимостей; нет независимых, многозначных фактов; нет зависимостей соединения; так что в 5NF.

...