我有一张大约有40列的表格。列名称的唯一区别是最后20个名称都以列名称前面的“B”开头。该表用于比较。换句话说,将前20列中的数据与最后20列中的数据进行比较。
我知道这是非常糟糕的设计,那么应该如何重新设计此表,以便只有20列,但我们仍然可以比较数据?
编辑:如果有帮助,我们也会使用此数据来查找匹配的群组
另请注意,此处的表现主要受到关注。通过复制列,获取数据非常快。
谢谢!
答案 0 :(得分:1)
两种可能的架构和查询提示。
1)使用“类型”列构建表,并使用该列标记“主要”与“备用”。在您的情况下,“A”与“B”可能是合适的。
2)构建一个垂直分区,两个相同的表(主数据和备用数据),共享一个公共主键。 (如果Id = 42在一个表中,它必须在另一个表中 - 除非“alternate”数据是可选的,在这种情况下不要填充第二个表。)还可选地,有一个第三个表跟踪所有可能的主数据密钥,以及已知对两个表都是通用的任何数据。
提示:阅读SELECT ... EXCEPT和SELECT ... INTERSECT。它们运行起来令人不安,并且想要比较两个数据集之间的所有列和行的差异(除外)和匹配(相交)。您可以使用这两种结构中的任何一种轻松地使用它,并且它也适用于您现有的代码(尽管编写查询可能比较麻烦)。