Часто вы можете упростить подобные вещи, используя Разъединительную нормальную форму .
Вы нормализуете свою логику в серии дизъюнкций - «или предложения». Каждый дизъюнкт представляет собой набор "и оговорок".
Итак, ваши правила становятся следующим долгим разделением.
OR
(Кстати, вы всегда можете сделать это, используя любую логику. Проблема в том, что некоторые вещи могут быть действительно сложными. Хорошая новость заключается в том, что ни один специалист по маркетингу не будет пытаться придумать вам непонятно жесткую логику. Далее, переписать любой старая форма к дизъюнктивной нормальной форме - это легкий кусок алгебры.)
Это, как вы заметили, всегда имеет два уровня глубины: всегда список разделений верхнего уровня (любой из которых может быть истинным) и список конъюнктов более низкого уровня (все из которых должны быть истинными) .
Итак, у вас есть таблица «Условия» со столбцами, такими как идентификатор и название продукта. Это определяет простое сравнение между позицией и продуктом.
У вас есть таблица Conjuncts ("среднего уровня и предложения") со столбцами, такими как идентификатор соединения и идентификатор условия. Соединение между соединением и условием создаст все условия для соединения. Если все эти условия верны, конъюнкт верен.
Имеется таблица Disjuncts («верхнего уровня или предложения») со столбцами, такими как Ij и DJ. Если одно из этих дизъюнктов истинно, дизъюнкт истинно.
Соединение между дизъюнктами, конъюнктами и условиями создает полный набор условий, которые необходимо проверить.