我继承的一个应用程序跟踪对 Material 样本执行的实验室测试结果。数据存储在单个表(tblSampleData)中,该表的主键为SampleID,并且235列表示潜在的测试结果。问题在于,每个样本仅执行少量测试,因此每行包含200多个空值。实际上,存在第二个相似的表(tblSampleData2),其中包含另外215个主要为空的列和SampleID的主键。这两个表具有一对一的关系,并且大多数SampleID在两个表中都有一些数据。 但是,对于每个SampleID,很容易就有400个空列!

这是不好的数据库设计吗?如果是,则打破了哪个范式规则?如何查询该表以标识通常将哪些列组与数据一起填充?我的目标是要有45个具有10列和更少空值的表。我怎样才能做到这一点?如何避免破坏现有应用程序?

到目前为止,这些表有大约200,000个样本记录。用户要求我添加更多列以进行更多测试,但是我宁愿构建一个新表。这明智吗?

最佳答案

我不确定设计真的那么糟糕。 NULL值实际上应该相对便宜地存储。在SQL Server中,每行都有一个或多个内部位字段,用于指示哪些列值为NULL。

如果不需要提高应用程序的性能,并且由于更改表模式而导致的重构成本效益不是正数,那么为什么要更改它呢?

10-04 19:07