Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Sql server 一列中有冗余数据的一个表与多个表_Sql Server_Sql Server 2008_Database Design - Fatal编程技术网

Sql server 一列中有冗余数据的一个表与多个表

Sql server 一列中有冗余数据的一个表与多个表,sql-server,sql-server-2008,database-design,Sql Server,Sql Server 2008,Database Design,我有一个场景,在这个场景中,我让用户将他们的自定义首选项上传到我们的实用程序正在进行的转换中。因此,我们面临的问题是 我们是否应该将这些自定义映射保存在一个表中,并使用额外的UID列或GUID列 , 或 我们是否应该为向我们注册的每个用户动态创建表,并为他们的自定义映射提供单独的表 对于自定义映射,我们更倾向于只使用一个额外的列和一个表,但这一列中的冗余数据对性能有影响吗?另一方面,逻辑要求我们规范化我们的表,并有单独的表。我很困惑该怎么做。通常的做法是使用一个带有用户id的表。如果有常用的重复

我有一个场景,在这个场景中,我让用户将他们的自定义首选项上传到我们的实用程序正在进行的转换中。因此,我们面临的问题是

我们是否应该将这些自定义映射保存在一个表中,并使用额外的UID列或GUID列 ,

我们是否应该为向我们注册的每个用户动态创建表,并为他们的自定义映射提供单独的表


对于自定义映射,我们更倾向于只使用一个额外的列和一个表,但这一列中的冗余数据对性能有影响吗?另一方面,逻辑要求我们规范化我们的表,并有单独的表。我很困惑该怎么做。

通常的做法是使用一个带有用户id的表。如果有常用的重复使用的首选项,您可以将它们重构成一个单独的表,并一次性引用它们,但这取决于您


为什么为每个用户创建一个表是个坏主意?嗯,如果你最终拥有一百万用户,我认为你不希望数据库中有一百万个表。这样做还可以保证您的查询充其量是笨拙的,通常比应该的查询慢,并且通常是动态生成和执行的,通常是最后的选择,不一定安全。

通常的做法是使用带有用户id的单个表。如果有常用的重复使用的首选项,您可以将它们重构成一个单独的表,并一次性引用它们,但这取决于您自己


为什么为每个用户创建一个表是个坏主意?嗯,如果你最终拥有一百万用户,我认为你不希望数据库中有一百万个表。这样做也会保证你的查询充其量是笨拙的,通常比应该的慢,并且经常是动态生成和执行的,通常是最后的选择,不一定安全。

我继承了一个系统,最初的开发人员选择了每个客户端一个表的方法。我们现在正在重写系统!从开发人员的角度来看,您最终将陷入动态SQL和循环的混乱。DBA不会高兴,因为他们每天早上醒来都会看到一个完全不同的数据库,这使得性能调整和维护变得不可能

用户表中可以有一个额外的BLOB或XML列,用于存储首选项。这被称为属性包方法,但我也不推荐这种方法,因为它在许多情况下会影响查询性能

在这种情况下,最好的方法是通过标准化解决问题。属性的单独表,通过PK/FK关系连接到用户表。我不建议使用GUID。这个GUiD很可能最终成为PK,这意味着您将拥有一个16字节的聚集索引,并且该索引还将传递到表上的所有非聚集索引。您可能还需要在Users表中构建一个非集群索引。此外,您可能会陷入使用
NEW\u ID()
而不是
NEW\u SEQUENTIALID()
生成这些guid的陷阱,这将导致大量碎片


如果您采用标准化方法,并且担心以表格格式返回两个表的结果,那么您可以简单地使用
PIVOT
操作符。

我继承了一个系统,最初的开发人员选择了每个客户端一个表的方法。我们现在正在重写系统!从开发人员的角度来看,您最终将陷入动态SQL和循环的混乱。DBA不会高兴,因为他们每天早上醒来都会看到一个完全不同的数据库,这使得性能调整和维护变得不可能

用户表中可以有一个额外的BLOB或XML列,用于存储首选项。这被称为属性包方法,但我也不推荐这种方法,因为它在许多情况下会影响查询性能

在这种情况下,最好的方法是通过标准化解决问题。属性的单独表,通过PK/FK关系连接到用户表。我不建议使用GUID。这个GUiD很可能最终成为PK,这意味着您将拥有一个16字节的聚集索引,并且该索引还将传递到表上的所有非聚集索引。您可能还需要在Users表中构建一个非集群索引。此外,您可能会陷入使用
NEW\u ID()
而不是
NEW\u SEQUENTIALID()
生成这些guid的陷阱,这将导致大量碎片


如果您采用标准化方法,并且担心以表格格式返回两个表的结果,那么您可以简单地使用
PIVOT
操作符。

谢谢,但我的领导坚持遵循特定于客户的表。悲哀。谢谢,但我的领导坚持要遵循客户特定的表格。悲哀。谢谢,但我的领导坚持要遵循客户特定的表格。我感谢您的帮助。谢谢,但我的领导坚持遵循客户特定的表格。我感谢你的帮助。