Sql server 宽桌子还是多行?

Sql server 宽桌子还是多行?,sql-server,database,Sql Server,Database,我正在写一个存储车辆记录的模式。我想为每辆车存储多达62条信息(“约束条件”)(年份、品牌、型号、抱负、轴距、车身样式、车门数量等)。大多数车辆将只填充5-10个约束 我有大约1250万张唱片要储存。我别无选择,只能在一台计算机上运行一个数据库 每个约束都存储为一个整数。另一个提供者,一个行业标准,给我这些值的标签。例如,54的品牌是“福特”。标签可以更新,但添加新标签更常见 没有必填字段。有些公司按年份+制造+型号分类,有些公司按发动机分类,有些公司按变速箱分类,有些公司将这些分类组合在一起

我正在写一个存储车辆记录的模式。我想为每辆车存储多达62条信息(“约束条件”)(年份、品牌、型号、抱负、轴距、车身样式、车门数量等)。大多数车辆将只填充5-10个约束

我有大约1250万张唱片要储存。我别无选择,只能在一台计算机上运行一个数据库

每个约束都存储为一个整数。另一个提供者,一个行业标准,给我这些值的标签。例如,54的品牌是“福特”。标签可以更新,但添加新标签更常见

没有必填字段。有些公司按年份+制造+型号分类,有些公司按发动机分类,有些公司按变速箱分类,有些公司将这些分类组合在一起

我可以制作一个至少有62列的表。每个列都将被索引,因为它们经常用于连接或在where子句中使用。或者我可以创建一个包含Id的vehicle表,然后创建一个约束表,该表将vehicle Id作为外键,并为单个车辆创建单个约束的信息

单个表的优点是能够在没有任何联接的情况下检索一个车辆的所有约束,但缺点是在每个记录的大多数列中都有一个空值,并且有很多索引

一种设计是否普遍优于另一种?我已经用我的原型做了一些性能测试,在查询时间上没有看到很大的差异

这些车辆每天从一个网站上被搜索和显示数百次


我目前正在mssql 2008 r2中进行原型设计,但可以设想使用2012年。

表将在夜间批量更新,还是连续的单行事务更新?大多数情况下,表是实时更新的。无论是用户使用网站更新个人记录,还是用户运行二进制文件,可能会插入/更新几千到上万条记录(尽管他们试图在一夜之间运行这些记录)。作为一般规则,我认为从以下两种方式之一考虑类似问题会有所帮助。“如果我的数据发生了变化,那么更新我的表需要付出多少努力?”例如,如果“Ford”将其名称更改为“Foobar”,只要您基于相同的ID进行链接,那么更改数据所需的努力就很小(在您的情况下,您不会更新12.5mil记录,而只是更新关系表)。另一件需要考虑的事情是,“我可以像数据一样分离吗?”例如,拥有一个特定的引擎是否总是意味着拥有其他特定的部分?如果是这样,您可以存储一个与这两者相关的值。我发现,对于相同的数据,并且查询返回相同的记录,单表设计在返回结果时要慢得多。慢了好几倍。我记得PinalDave说过,他发现当有很多列只包含空值时,会对查询性能产生负面影响。他还提到不应该这样做,但测试表明确实如此。我不知道我是否也在做同样的观察。