我从小就读过-我们学会了在应用程序的业务层之前设计数据库架构(或使用OOAD进行其他所有操作)。我在设计模式(IMHO :)方面一直做得很好,并且进行规范化只是为了删除不必要的冗余,而没有在影响速度的地方进行标准化,即,如果联接对性能造成了影响,则冗余就留在了原处。但大多数情况并非如此。
随着一些ORM框架(如Ruby的ActiveRecord或ActiveJDBC)的出现(还有我不记得的其他几个,但是我敢肯定有很多),似乎他们更喜欢为每个表使用代理键,即使有些表具有主键,例如'电子邮件'-彻底破坏2NF。好的,我了解不多,但是当其中一些ORM(或程序员)不承认1-1或1-0 | 1(即1到0或1)时,我(几乎)感到不安。他们规定,最好将所有内容都放在一张大桌子上,而不管它是否有大量的nulls
“当今系统可以处理它”,这是我经常听到的评论。
我同意内存限制确实与规范化有直接关系(还有其他好处:),但是在 当今廉价的内存和四核计算机的时代,DB规范化的概念是否留给文本?作为DBA,您是否仍在对3NF(如果不是BCNF :)进行标准化?有关系吗?“脏模式”设计是否适合生产系统?如果仍然有意义,应该如何为“归一化”提出理由。
(注意:我不是在谈论数据仓库的星型/雪花模式,这种模式作为设计的一部分/需求是冗余的,但是带有后端数据库(例如StackExchange)的商业系统)