Я пытаюсь определить, имеет ли смысл мой текущий дизайн. У меня есть таблица цен, которая всегда будет иметь значение по умолчанию для данного продукта (ProductId). В зависимости от нескольких условий цена может быть перезаписана.DB Design - переопределяющие значения
Учитывая эту таблицу:
Я хотел бы получить соответствующие цены на основе данного города, округа, штата или по умолчанию. Это несколько надуманно, поскольку тип и приоритет представляют одно и то же и, вероятно, будут ограничены 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
Gets мне именно то, что я ищу:
Два метода я рассматриваю являются:
Все в коде приложения (имея все доступные значения, а затем исходя из нулевых значений, найдите наиболее подходящую цену.
В SQL (продемонстрировано выше), взяв верхнее значение, упорядоченное по приоритету в desc И в SQL с использованием креста применим для получения всех цен (по сравнению с одной записью). Coalesce (адресация ответа) также является решением, но coalesce может быть экспансивным, который я нашел в прошлом. Я предпочитаю эту версию.
Есть ли другие методы или узоры, которые я должен учитывать?
Изменить свой вопрос и предоставить образцы данных и желаемые результаты. –