Tsql 如何设计一个包含两组几乎重复的列名的表?

Tsql 如何设计一个包含两组几乎重复的列名的表?,tsql,sql-server-2008-r2,database-design,Tsql,Sql Server 2008 R2,Database Design,我有一个大约有40列的表。列名的唯一区别是,最后20个列名都以“B”开头。此表用于比较。换句话说,将前20列中的数据与后20列中的数据进行比较 我知道这是一个非常糟糕的设计,所以这个表应该如何重新设计,这样只有20列,但我们仍然可以比较数据 编辑:如果有帮助的话,我们也使用这些数据来寻找匹配的队列 还要注意,性能是这里主要关注的问题。通过复制列,获取数据的速度非常快 谢谢 两种可能的架构和一个查询提示 1) 用“Type”列构建表,并使用该列标记“primary”和“alternate”。在你的

我有一个大约有40列的表。列名的唯一区别是,最后20个列名都以“B”开头。此表用于比较。换句话说,将前20列中的数据与后20列中的数据进行比较

我知道这是一个非常糟糕的设计,所以这个表应该如何重新设计,这样只有20列,但我们仍然可以比较数据

编辑:如果有帮助的话,我们也使用这些数据来寻找匹配的队列

还要注意,性能是这里主要关注的问题。通过复制列,获取数据的速度非常快


谢谢

两种可能的架构和一个查询提示

1) 用“Type”列构建表,并使用该列标记“primary”和“alternate”。在你的情况下,“A”和“B”可能是合适的

2) 构建一个垂直分区,两个相同的表(用于主数据和备用数据),它们共享一个公共主键。(如果Id=42在一个表中,那么它必须在另一个表中——除非“备用”数据是可选的,在这种情况下,不要填充第二个表。)也可以选择,有一个跟踪所有可能主键的第三个表,以及已知总是两个表共用的任何数据


提示:阅读“选择…除外”,然后选择“相交”。它们运行速度快得令人不安,是比较两个数据集之间所有列和行的差异(除了)和匹配(相交)的理想方法。这两种结构中的任何一种都可以很容易地使用,而且它也可以用于现有代码(尽管编写查询可能会比较麻烦)。

我不明白-您必须知道数据是否相关才能正确插入?那么,第二组列在做什么?听起来像是一个单列引用另一行主键的并集或联接的情况,但我不确定我是否完全理解您的情况。您是对的,在插入数据之前,生成并插入此表的存储过程正确地标识了匹配的队列(related)。