"遵守标准的数据库具有以下特点:有一组表专门存放通过键连接起来的关联数据。比方说,某个存放客户及其有关定单的 3NF 数据库就可能有两个表:Customer 和 Order。Order 表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向 Customer 表里包含该客户信息的那一行。更高层次的标准化也有,但更标准是否就一定更好呢?答案是不一定。事实上,对某些项目来说,甚至就连 3NF 都可能给数据库引入太高的复杂性。
为了效率的缘故,对表不进行标准化有时也是必要的,这样的例子很多。曾经有个开发餐饮分析软件的活就是用非标准化表把查询时间从平均 40 秒降低到了两秒左右。虽然我不得不这么做,但我绝不把数据表的非标准化当作当然的设计理念。而具体的操作不过是一种派生。所以如果表出了问题重新产生非标准化的表是完全可能的。"
设计数据库的时候要注意各个字段实际的意义, 比如说你做的定单, 如果该业务员换了单位, 你还会去修改他做的所有定单吗? 这种事情是没有的也是不应该的, 定单就是要反映做好时的状况, 所以, 姓名在做定单的时候一定要填进去, 一旦定单签好了, 无论ID有什么变化都不应该再做改动, 从这个意义上说, 定单表里一定要有业务员姓名的项目, 以便如实地反映出定单做好时的状态.
比较好的书籍:
<数据库系统概念>