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或伪代码片段将不胜感激.:)
看起来你的问题就是测试是否满足特定条件.
你将有复合条件.所以给出一个项目表:
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表中,然后将完成的任务解释为拥有特定徽章.然后,您可以使用相同的代码处理项目和任务.