数据库设计:由于逻辑差异而中断规范化规则?

时间:2011-02-03 09:02:22

标签: database database-design normalization

我有一个庞大的数据库。 在这个数据库中,我有一个用户表。

在这个用户表中,我可以获得有关用户的所有信息 - 地址,用户名,重量,发色等等(我猜是50-80 coloums)。

现在我将进行用户设置。

当然,1个用户只能有1个设置,所以它是1:1的连接,而且在我多年前学过的规范中,设置应该在用户表中作为颜色。

但逻辑上它是用户信息之间的巨大差异,例如我将为用户/管理员显示的地址和用户的网站行为设置。

我该怎么办? 自己的UserSettings表并打破大逻辑差异的正常规则 OR 将设置作为coloums放在用户表中并且不破坏大逻辑的规范化规则???

3 个答案:

答案 0 :(得分:1)

对于大型复杂数据库来说,完全规范化很少是正确的方法。

始终考虑模型的优缺点。请考虑以下因素:复杂性,性能,维护,演变。

如果您的数据库是不断发展的系统的一部分,那么您几乎肯定会在将来的某个时刻更改您的模型(表格)和关系。

根据经验,让模特贴近现实生活将带来长远的好处。特别是当您的客户/用户返回新的功能请求时。

尝试考虑如何以不同方式对数据建模。例如:您当前的“用户”记录听起来更像是“联系人”记录。联系人记录可能具有除存储系统设置之外的其他用途 - 因此将两个模型保持为单独的表将是正确的解决方案 - 即使关系确实以1:1开始。

答案 1 :(得分:0)

为用户设置创建单独的表不会破坏规范化规则。如果由于其他原因有意义,那么我建议你这样做。

答案 2 :(得分:0)

将表分开是可以的 - 例如,RDBMS很可能能够在读取行时避免大量磁盘搜索(或读取大量不需要的数据)。这取决于您的应用以及它如何查询数据。