我想確定我目前的設計是否最有意義。我有一個定價表,它總是有一個給定產品的默認值(ProductId)。根據多種環境,價格可能會被覆蓋。數據庫設計 - 覆蓋值
對於這個表:
我想獲得基於給定的市,縣,州或默認情況下,適當的價格。由於Type和Priority代表了相同的事情,並且可能僅限於int和索引(不需要字符串),所以這有點做作。我使用INT,因爲它允許我排序並優先選擇從內部查詢的TOP中選擇哪一個。使用這個SQL:
SELECT DISTINCT ProductId, prices.Price
FROM [CCC].[Prices] p CROSS APPLY
(
SELECT TOP 1 Price
FROM [CCC].[Prices] p2
WHERE p.ProductId = p2.ProductId
AND (Type = 'Default'
OR (Type = 'City' AND TypeId = 553)
OR (Type = 'State' AND TypeId = '4'))
ORDER BY [Priority] DESC
) prices
獲取我正是我要尋找:
這兩種方法我正在考慮是:
所有的應用程序代碼(具有所有可用值,然後基於空值找到最合適的價格。
在SQL(上面已演示)中,採用desc 中按優先級排序的最高值並在SQL中使用交叉應用來獲取所有價格(與單個記錄相比)。合併(解決發佈的答案)也是一種解決方案,但過去我發現合併可能會很廣泛。我更喜歡這個版本。
我應該考慮其他方法或模式嗎?
編輯您的問題並提供樣本數據和期望的結果。 –