Sql server 需要帮助物理设计一个包含3个阶段中填充的行的大表吗

Sql server 需要帮助物理设计一个包含3个阶段中填充的行的大表吗,sql-server,database-design,Sql Server,Database Design,我正在设计一个特殊的SQL Server表,每天添加1百万行。该表分3个阶段填充。这意味着实体生命周期有4种状态: 状态1:插入新行并填充第1-15列。其余列保持空 状态2:更新(填充)列16-25 状态3:更新(填充)列26-40 状态4:可以处理该行以进行报告 上述要求造成以下低效: 所有16-40列都必须为空,因为它们是在创建每一行之后填充的 由于在创建每一行之后,至少有2组空列被化蛹化(更新),所以会有很多碎片-我想是吧 我想把这个实体分成3个表,但是,如果我这样做了,那么我需要

我正在设计一个特殊的SQL Server表,每天添加1百万行。该表分3个阶段填充。这意味着实体生命周期有4种状态:

  • 状态1:插入新行并填充第1-15列。其余列保持空

  • 状态2:更新(填充)列16-25

  • 状态3:更新(填充)列26-40

  • 状态4:可以处理该行以进行报告

上述要求造成以下低效:

  • 所有16-40列都必须为空,因为它们是在创建每一行之后填充的
  • 由于在创建每一行之后,至少有2组空列被化蛹化(更新),所以会有很多碎片-我想是吧
我想把这个实体分成3个表,但是,如果我这样做了,那么我需要在报告过程中继续连接这3个表。
有没有什么技术或模式可以帮助我使这张桌子更有效率

我们有一个类似的情况,第1-3列构成数据集的唯一键,第4-100列是表数据

基本上,我们将其分为: 1) 包含3列唯一键和ID列(日期、标识等,如有必要)的表 2) 一种表,用于保存列名称/编号和列值的键值对,以及表1中ID的FK

表1

ID | Date     | Col1 | Col2 | Col3 
1  | 1/5/2016 | USA  | USD  | TRUE
2  | 1/5/2016 | UK   | GBP  | TRUE
3  | 1/5/2016 | UK   | EUR  | FALSE
4  | 1/6/2016 | USA  | USD  | TRUE
表2

ID | Column_No | Value
1  | 16        | 53
1  | 17        | Greenback
1  | 18        | Chicago
2  | 16        | 1.3
2  | 23        | Leeds
3  | 16        | 2.8
3  | 18        | Manchester
3  | 26        | 643
3  | 33        | MThatcher
3  | 34        | Union Jack
有很多事情要考虑;用户如何查询数据集、如何获取更新、是否必须保留历史记录等。这将帮助您了解表设计和索引


这是一个过于简化的答案,但可能会为您指出正确的方向

当偶尔使用(填充)列时,您解释的想法效果很好。这里的要求不同。所有行和列都已填充。问题是在插入时没有填充它们,并且会有后续更新。顺便说一句,对于您解释的场景,您应该看看稀疏列。