Соедините две разные таблицы на основе поиска - PullRequest
0 голосов
/ 14 ноября 2010

У нас есть большие (2M + строки) таблицы данных продуктов с более чем 50 полями данных и несколькими кодами продуктов для разных стран. Я хотел бы иметь возможность эффективно объединять из ProductData в различные таблицы поиска на основе различных полей кода. В настоящее время мы используем отдельные, но очень похожие SP для реализации логики, и это приводит к проблемам с версиями при их изменении. Сами SP, как правило, состоят из 200-500 строк, реализующих сложную логику, и 95% логики универсальны, но большинство операторов объединения зависят от страны.

Упрощенная версия в псевдо-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

Обратите внимание, что значения кода часто повторяются в разных странах, поэтому мы не можем легко объединить таблицы поиска.

1 Ответ

3 голосов
/ 14 ноября 2010

Ваша проблема в том, что ваша схема плохо спроектирована. Вам нужно нормализовать это:

ProductCodeUK, ProductCodeUSA, ProductCodeJapan, ProductCodeGermany, ...

Вы должны переместить эти данные в новую таблицу с тремя столбцами, один из которых является внешним ключом обратно к исходной таблице:

Product CountryCode ProductCode 

И ваша таблица поиска должна выглядеть так:

CountryCode ProductCode Price ....

С этим новым дизайном ваши соединения всегда одинаковы. Чтобы выбрать разные страны, вам нужно всего лишь изменить параметр в предложении WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...