Лучший способ добиться исключения матрицы с помощью запроса - PullRequest
2 голосов
/ 23 июня 2009

Каков наилучший способ достижения этой матрицы исключений с помощью запроса.

В таблице имеется фиксированное количество товаров, и идея заключается в том, что если товар продан покупателю (представлен строкой), то другие товары (столбцы) могут продаваться или не продаваться на основе приведенной ниже матрицы правил. Цель состоит в том, чтобы получить код продукта, который разрешено продавать для любого данного кода проданного продукта.

ProductCode|MRLSPN|MRLSPPN|MRLSDF|MRLSPDF|LGS|LGP|HOBN|HODF|HVO|HVOF
MRLSPN     |No    |No     |No    |No     |No |Yes|No  |No  |No |No  
MRLSPPN    |No    |No     |No    |No     |No |No |No  |No  |No |No  
MRLSDF     |No    |No     |No    |No     |No |Yes|No  |No  |No |No  
MRLSPDF    |No    |No     |No    |No     |No |No |No  |No  |No |No  
LGS        |No    |No     |No    |No     |No |Yes|No  |No  |No |No  
LGP        |Yes   |No     |Yes   |No     |No |No |No  |No  |No |No
HOBN       |No    |No     |No    |No     |Yes|Yes|No  |No  |No |No  
HODF       |No    |No     |No    |No     |Yes|Yes|No  |No  |No |No  
HVO        |Yes   |Yes    |Yes   |Yes    |Yes|Yes|Yes |Yes |No |No  
HVOF       |Yes   |Yes    |Yes   |Yes    |Yes|Yes|Yes |Yes |No |No  

Готов построчно по столбцам.

Ответы [ 3 ]

2 голосов
/ 23 июня 2009

Можете ли вы изменить свой формат с матрицы на таблицу ассоциаций, например

Таблица Дополнительные продукты: SoldProductCode AdditionalProductCode

Так что ваш стол будет выглядеть как

SoldProdCode, Additional ProdCode
MRLSPN, LGP
MRLSDF, LGP

Теперь вы можете просто выполнить запрос, чтобы сказать

SELECT AdditionalProductCode
FROM AdditionalProducts
WHERE SoldProductcode='MRLSPN'

Редактировать

Еще одним преимуществом этого подхода является то, что если вы предоставляете специальные скидки, если вы покупаете MRLSPN, вы получаете LGP со скидкой 10%, а если вы покупаете MRLSDF, вы можете получить скидку 15 $. С помощью этой модели вы можете расширить таблицу ассоциации, включив в нее дополнительные атрибуты. Это может относиться или не относиться к вашей модели.

0 голосов
/ 23 июня 2009

Это таблица ссылок «многие ко многим»:

Sold   CanBeSold
----   ---------
MRLSPN LGP
MRLSDF LGP
…

и запрос:

SELECT  CanBeSold
FROM    matrix
WHERE   Sold = @Product
0 голосов
/ 23 июня 2009

Если вы можете гарантировать не более 32 столбцов, вы можете реализовать использование int (32 бита) в качестве поля битового флага. Но отношения «многие ко многим» будут более гибкими.

Создание таблицы сопоставления «многие ко многим», ProductCode2ProductCodeMapping

CREATE TABLE ProductCode2ProductCodeMapping
(
   ProductCodeId int,
   AllowedProductCodeId int
)

С составным первичным ключом, использующим оба этих столбца.

Затем вставьте строку для каждого продукта и соответствующего продукта.

Тогда просто запросите как:

SELECT AllowedProductCodeId 
FROM ProductCode2ProductCodeMapping
WHERE ProductCodeId = @myProductCodeId

Если у вас нет целочисленных идентификаторов для продуктов, вы можете либо добавить их, либо вместо этого использовать код продукта charCode (я бы предпочел первый)

...