存储逻辑规则的适当数据结构和数据库模式是什么?

Jay*_*son 14 database boolean-logic rule-engine

前言:我没有规则引擎,构建规则,建模规则,实现规则的数据结构等等方面的经验.因此,我不知道我在做什么,或者我在下面尝试的是什么.

我正在试图弄清楚如何存储和处理以下假设情景.为了简化我的问题,假设我有一种用户购买对象的游戏类型,其中可能有1000个可能的对象,并且必须按指定的顺序购买对象,并且只能在特定的组中购买.例如,假设我是用户并且我想购买对象F.在我购买对象F之前,我必须先前购买了对象A OR(B和C).我不能同时购买F和A,也不能购买F和B. 它们必须符合规则指定的顺序.先是,然后是F.或者,首先是B,C,然后是F. 我现在并不关心购买之间的时间跨度,或用户的任何其他特征,只是它们是现在的正确顺序.

为潜在的数千个对象存储此信息的最佳方法是什么,这些对象允许我读取所购买对象的规则,然后根据用户以前的购买历史记录进行检查?

我试过这个,但我一直试图实现A OR(B和C)这样的分组.我想将规则存储在我拥有这些表的数据库中:

 Objects
    (ID(int),Description(char)) 

ObjectPurchRules
    (ObjectID(int),ReqirementObjectID(int),OperatorRule(char),Sequence(int)) 
Run Code Online (Sandbox Code Playgroud)

但显然,当您处理结果时,如果没有分组,您将得到错误的答案.如果可能,我想避免过多的字符串解析:).一个对象可能具有未知数量的先前所需购买.用于处理规则的SQL或伪代码片段将不胜感激.:)

Joh*_*ohn 5

看起来你的问题就是测试是否满足特定条件.

你将有复合条件.所以给出一个项目表:

ID_Item    Description
----------------------
1          A         
2          B         
3          C         
4          F         

并给出了可能的行动表:

ID_Action  VerbID  ItemID    ConditionID
----------------------------------------
1          BUY     4         1

我们构建了一个条件表:

ID_Condition  VerbA  ObjectA_ID  Boolean  VerbB            ObjectB_ID
---------------------------------------------------------------------
1             OWNS   1           OR       MEETS_CONDITION  2
2             OWNS   2           AND      OWNS             3

所以OWNS意味着id是Items表的键,MEETS_CONDITION意味着id是Conditions表的键.

这并不意味着限制你.你可以添加任务或其他任何表格,并添加额外的动词来告诉你在哪里看.或者,只需在完成任务后将任务放入Items表中,然后将完成的任务解释为拥有特定徽章.然后,您可以使用相同的代码处理项目和任务.