Опираясь на решение GBN, один уровень будет оптимальным.Иерархия, которую вы описываете, может иметь приоритет по умолчанию, состояние 10, город 20 и т. Д.Пользователи могут переопределить, если необходимо, или, если иерархическое отношение является статическим, его можно просто закодировать в таблицу метаданных (RulePrecedence).
Вот пример запроса:
Select * from Rule Where [What Rule Is Needed] Order by Precedence
Тогда вы можете иметьстолько оценок / уровней, сколько вы хотите для каждого правила, и они оцениваются в порядке приоритета.
Я думаю, что это сработает, и схема не будет такой сложной.
Если естьне так много оценок, тогда запрос может быть простым.Если потенциально может быть тысячи «переопределений», то вы можете захотеть что-то вроде этого, чтобы ограничить возвращаемые «Правила»:
Select * from Rule Where Rule.Country = 'US' AND Rule.State = 'MA' And Rule.ID = 'MaxExtraWorkHour' Order By Precedence
Обратите внимание, что эти запросы только для примера.(Выбор * используется только для сохранения набора текста)