这是来自normal forms的关于Wikipedia的文章的屏幕截图。
有人指出,为了符合3NF
,必须将Genre Name
列放入其自己的字典表中。
我的问题是,Author Nationality
是否也打破了3NF
?
答案 0 :(得分:1)
是的,你是对的,Author Nationality
也在打破3NF。
说明如下。 Book
可以识别author
,但不能相反。因此author
在功能上取决于书籍。 author
和author nationality
的情况相同。 Author nationality
在功能上取决于author
。那里有传递依赖项:author nationality
-> author
-> book
。
在书本表中可以优化的另一件事是列thickness
。它在功能上取决于pages
。不过,将其放在额外的表中可能会显得过分,因为可以轻松地从pages
得出此信息。我个人不会将该信息存储在数据库中。如果要在数据库中保存此信息,可以创建一个类似
CREATE VIEW v_book AS
SELECT b.*,
case when pages between 0 and 100 then 'slim' else 'thick' end as thickness
FROM book b;
书桌应该看起来像
book | author_id | pages | genre_id | publisher_id
与另一位表格作者
author_id | author_name | author_nationality