这是有关从normal forms采取Wikipedia文章截图。
有说,为了顺应3NF
的Genre Name
列必须把它自己的字典表。
我的问题是,在Author Nationality
打破3NF
还存在?
是的,你是对的,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