Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库设计:是否因逻辑差异而打破规范?_Database_Database Design_Normalization - Fatal编程技术网

Database 数据库设计:是否因逻辑差异而打破规范?

Database 数据库设计:是否因逻辑差异而打破规范?,database,database-design,normalization,Database,Database Design,Normalization,我有一个庞大的数据库。 在这个数据库中,我有一个用户表 在这个用户表中,我有关于用户的所有信息——地址、用户名、体重、头发颜色等等(我猜是50-80个科隆) 现在我将有用户设置 当然,一个用户只能有一个设置,所以这是一个1:1的连接,在我多年前学习的正常化规则中,设置应该作为用户表中的冒号 但从逻辑上讲,我将为用户/管理员显示的地址等用户信息与用户的网站行为设置之间存在很大差异 我该怎么办? 拥有用于用户设置的表,并打破大逻辑差异的正常化规则,或将设置作为冒号放在用户表中,而不打破用于大逻辑的正

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

在这个用户表中,我有关于用户的所有信息——地址、用户名、体重、头发颜色等等(我猜是50-80个科隆)

现在我将有用户设置

当然,一个用户只能有一个设置,所以这是一个1:1的连接,在我多年前学习的正常化规则中,设置应该作为用户表中的冒号

但从逻辑上讲,我将为用户/管理员显示的地址等用户信息与用户的网站行为设置之间存在很大差异

我该怎么办?
拥有用于用户设置的表,并打破大逻辑差异的正常化规则,或将设置作为冒号放在用户表中,而不打破用于大逻辑的正常化规则???

为用户设置创建单独的表不会打破正常化规则。如果出于其他原因,它是有意义的,那么我建议您这样做。

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

始终仔细考虑你的模型的优缺点。考虑以下因素:复杂性、性能、维护、进化。 如果您的数据库是一个不断发展的系统的一部分,那么您几乎肯定会在将来的某个时候更改您的模型(表)和关系

根据经验,让你的模型贴近现实生活会带来长期的好处。尤其是当您的客户机/用户返回一个新的功能请求时


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

将表分开是可以的-例如,RDBMS可以很好地避免大量磁盘查找(或读取大量不需要的数据)读行的时候。这取决于你的应用程序以及它查询数据的方式