用户只能有一个博客(用户拥有博客)
博客可以有多个帖子
组只能有一个博客(但没有特定用户拥有博客,假设组所有者创建了博客,因此用户ID只是用户博客的属性而不是组博客,因此需要进行子类型化)
当删除group_blog_post时,也应删除基础blog_posts行,这是否最好使用触发器完成?
答案 0 :(得分:1)
对于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。