如何在数据库中创建和/或关系?

tee*_*bot 4 database database-design

我有一张优惠券表.优惠券仅适用于某些商品或适用于整个商品类别.

例如:比萨12" (1L百事可乐炸薯条)的5美元优惠券

我能想到的最好的方法是制作一个CouponMenuItems表,其中包含coupon_id和位字段,如IsOr和IsAnd.它不起作用,因为在这个例子中我有2组项目.第二个是2个项目之间的OR关系.

知道如何做到这一点所以实现的逻辑尽可能简单吗?

任何帮助或提示赞赏!

谢谢,

Teebot

S.L*_*ott 5

通常,您可以使用析取范式来简化此类事物.

您将逻辑规范化为一系列分离 - "或条款".每个析取都是"和条款".

因此,您的规则将成为以下长期分离.

  • 比萨饼百事可乐

要么

  • 比萨饼炸薯条

(你总是可以做到这一点,BTW,任何逻辑.问题是有些事情可能真的很复杂.好消息是没有营销人员会在你身上尝试令人困惑的逻辑.此外,从任何旧形式的重写解析正常形式是一个简单的代数.)

你会注意到,这总是两层深的:总是一个顶层的析取列表(其中任何一个都可能是真的)和一个较低级别的合取列表(所有这些都必须为真).

因此,您有一个"条件"表,其中包含id和产品名称等列.这定义了订单项和产品之间的简单比较.

您有一个Conjuncts("中级和子句")表,其中包含联合ID和条件ID等列.合取与条件之间的联合将产生合取的所有条件.如果所有这些条件都成立,则合并为真.

具有Disjuncts("顶级或子句")表,其中包含诸如disjunct Id和conjunct ID之类的列.如果这些析取中的一个是真的,则析取是正确的.

析取,合取和条件之间的连接产生了您需要测试的完整条件集.