Я работаю над проектом, в котором нам нужно будет определить определенные типы статусов для большого количества людей, хранящихся в базе данных.Бизнес-правила определения этих статусов довольно сложны и могут измениться.
Например,
if a person is part of group X
and (if they have attribute O) has either attribute P or attribute Q,
or (if they don't have attribute O) has attribute P but not Q,
and don't have attribute R,
and aren't part of group Y (unless they also are part of group Z),
then status A is true.
Умножить на несколько десятков статусов и, возможно, сотни групп и атрибутов.Люди, группы и атрибуты находятся в базе данных.
Хотя это будет использоваться приложением Java, мы также хотим иметь возможность запускать отчеты непосредственно в базе данных, поэтому было бы лучше, если бынабор вычисленных состояний был доступен на уровне данных.
Таким образом, наш текущий план проектирования должен иметь таблицу или представление, состоящее из набора логических флагов (hasStatusA? hasStatusB? hasStatusC?) для каждогочеловек.Таким образом, если я хочу сделать запрос для всех, кто имеет статус C, мне не нужно знать все правила для вычисления статуса C;Я просто проверяю флаг.
(обратите внимание, что в реальной жизни флаги будут иметь более значимые имена: isElptableForReview ?, isPastDueForReview? И т. Д.).
Итак, а) эторазумный подход, и б) если так, каков наилучший способ вычисления этих флагов?
Некоторые варианты, которые мы рассматриваем для вычисления флагов:
Создайте набор изпомечает представление и вычисляет значения флага из базовых данных в режиме реального времени, используя SQL или PL-SQL (это БД Oracle).Таким образом, значения всегда точны, но производительность может пострадать, и разработчик должен будет поддерживать правила.
Сделать набор флагов состоящим из статических данных и использовать некоторыетип механизма правил, чтобы поддерживать эти флаги в актуальном состоянии при изменении базовых данных.Таким образом, правила могут поддерживаться легче, но флаги могут быть неточными в данный момент времени.(Если мы пойдем с этим подходом, есть ли механизм правил, который может легко манипулировать данными в базе данных таким образом?)