2010-12-09 37 views
0

我有一个大约40列的表格。列名称中唯一的区别是最后的20个列名都以“B”开头。此表用于比较。换句话说,将前20列中的数据与最后20列中的数据进行比较。如何设计具有两组几乎重复列名的表?

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

编辑:如果有帮助,我们也用这个数据来查找匹配队列

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

谢谢!

+0

我不明白 - 你必须知道数据是相关的,插入它是正确的吗?那么这第二组列是干什么的?听起来就像是一个联盟或者一个参考另一行主键的单一列的情况,但我不确定我是否足够明白你的情况。 – Yishai 2010-12-09 16:05:48

回答

1

两种可能的体系结构和查询提示。

1)使用“类型”列构建表格,并使用它来标记“主要”与“替代”。在你的情况下,“A”与“B”可能是合适的。

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

提示:请仔细阅读SELECT ... EXCEPT和SELECT ... INTERSECT。它们运行速度令人不安,并且想法是比较两个数据集之间的差异(除外)和匹配(相交)之间的所有列和行。你可以用这两个结构中的任何一个相当简单地使用它,它也可以用你现有的代码(尽管编写查询可能会更加麻烦)。

相关问题