Это единственный раз в моей жизни, когда я нашел законное применение для декартового произведения.
В последней компании, в которой я работал, был отчет, который запрашивался ежеквартально, чтобы определить, какие часто задаваемые вопросы использовались в каждом географическом регионе для национального веб-сайта, над которым мы работали.
Наша база данных описывает географические регионы (рынки) кортежем (4, x)
, где 4
представляет номер уровня в иерархии, а x
представляет уникальный marketId
.
Каждый FAQ обозначается FaqId
, а каждая связь с FAQ определяется составным ключом marketId
tuple и FaqId
. Связи устанавливаются через приложение администратора, но, учитывая, что в системе имеется 1000 часто задаваемых вопросов и 120 рынков, было сложно установить начальные ассоциации всякий раз, когда создавался новый FAQ. Итак, мы создали выбор рынка по умолчанию и изменили кортеж marketId
на (-1,-1)
, чтобы представить это.
Назад к отчету - отчет должен был отображать каждый вопрос / ответ на часто задаваемые вопросы и рынки, на которых этот FAQ отображался в 2D-матрице (мы использовали электронную таблицу Excel). Я обнаружил, что проще всего связать каждый FAQ с каждым рынком в случае выбора рынка по умолчанию с помощью этого запроса, объединив разбитый результат со всеми другими прямыми ассоциациями FAQ-market.
Таблица Faq2LevelDefault
содержит все рынки, которые определены как выбранные по умолчанию (я думаю, что это был просто список идентификаторов рынков).
SELECT FaqId, fld.LevelId, 1 [Exists]
FROM Faq2Levels fl
CROSS JOIN Faq2LevelDefault fld
WHERE fl.LevelId=-1 and fl.LevelNumber=-1 and fld.LevelNumber=4
UNION
SELECT Faqid, LevelId, 1 [Exists] from Faq2Levels WHERE LevelNumber=4