我们拥有大型(2M +行)产品数据表,其中包含50多个数据字段和多个国家/地区特定的产品代码。我希望能够有效地从ProductData连接到基于不同代码字段的不同查找表。我们目前使用单独但非常相似的SP来实现逻辑,并且当它们发生变化时会导致版本问题。 SP本身通常是200-500行,实现复杂逻辑,95%的逻辑是通用的,但大多数连接语句都是特定于国家的。
Pseudo SQL中的简化版本看起来像这样
ProductTable Schema
Id, Data1, Data2, .... , ProductCodeUK, ProductCodeUSA, ProductJapan
SP1_USA
select Id, Data, Data, LookupUSA.Price As Price from ProductTable
join LookupUSA on ProductTable.ProductCodeUSA = LookupUSA.Code
SP2_UK
select Id, Data, Data, LookupUK.Price As Price from ProductTable
join LookupUK on ProductTable.CodeVersion2 = LookupUK.ProductCodeUK
请注意,代码值通常在不同国家/地区之间重复,因此我们无法轻松地将查找表合并在一起。
答案 0 :(得分:3)
您的问题是您的架构设计糟糕。你需要规范化这个:
ProductCodeUK, ProductCodeUSA, ProductCodeJapan, ProductCodeGermany, ...
您应该将此数据移动到具有三列的新表中,其中一列是返回原始表的外键:
Product CountryCode ProductCode
您的查找表应如下所示:
CountryCode ProductCode Price ....
使用这种新设计,您的连接始终是相同的。要选择不同的国家/地区,您现在只需要修改WHERE子句中的参数。