存储逻辑规则的合适数据结构和数据库模式是啥?
Posted
技术标签:
【中文标题】存储逻辑规则的合适数据结构和数据库模式是啥?【英文标题】:What is an appropriate data structure and database schema to store logic rules?存储逻辑规则的合适数据结构和数据库模式是什么? 【发布时间】:2010-12-26 13:17:38 【问题描述】:前言:我没有规则引擎、构建规则、建模规则、为规则实现数据结构等方面的经验。因此,我不知道我在做什么,也不知道我在下面尝试的内容是否离谱。
我试图弄清楚如何存储和处理以下假设场景。为了简化我的问题,假设我有一种游戏,其中用户购买了一个对象,其中可能有 1000 个可能的对象,并且对象必须以指定的顺序购买,并且只能在某些组中购买。例如,假设我是用户,我想购买对象 F。在我购买对象 F 之前,我必须之前购买了对象 A OR (B AND C)。我不能同时购买 F 和 A,也不能同时购买 F 和 B、C。它们必须按照规则指定的顺序排列。先是A,然后是F。或者,首先是 B,C,然后是 F。我现在不关心购买之间的时间跨度或用户的任何其他特征,只是它们现在是正确的顺序。
为潜在的数千个对象存储此信息的最佳方法是什么,让我可以读取所购买对象的规则,然后对照用户以前的购买历史记录进行检查?
我已经尝试过了,但我一直在尝试实现诸如 A OR (B AND C) 之类的分组。我想将规则存储在我有这些表的数据库中:
Objects
(ID(int),Description(char))
ObjectPurchRules
(ObjectID(int),ReqirementObjectID(int),OperatorRule(char),Sequence(int))
但显然,当您处理结果时,如果没有分组,您会得到错误的答案。如果可能的话,我想避免过多的字符串解析:)。一个对象可能有未知数量的先前所需购买。用于处理规则的 SQL 或伪代码 sn-ps 将不胜感激。 :)
【问题讨论】:
【参考方案1】:您的问题似乎分解为测试是否满足特定条件。
你会有复合条件。 所以给定一个项目表:
ID_项目描述 ---------------------- 1个 2乙 3℃ 4楼并给出一个可能的操作表:
ID_Action VerbID ItemID ConditionID -------------------------------------- 1 买 4 1我们构造一个条件表:
ID_Condition VerbA ObjectA_ID Boolean VerbB ObjectB_ID -------------------------------------------------- ------------------ 1 拥有 1 或 MEETS_CONDITION 2 2 拥有 2 和拥有 3所以OWNS表示id是Items表的key,MEETS_CONDITION表示id是Conditions表的key。
这并不是要限制您。您可以添加带有任务或其他内容的其他表格,并添加额外的动词来告诉您在哪里查看。或者,只需在完成任务时将任务放入您的项目表中,然后将完成的任务解释为拥有特定的徽章。然后你可以用相同的代码处理物品和任务。
【讨论】:
【参考方案2】:这是一个非常复杂的问题,我没有资格回答,但我看到很多参考资料。根本问题在于,对于游戏、任务和物品以及各种对象的“统计”可能具有非关系依赖关系。 This thread may help you a lot.
您可能想阅读几本关于该主题的书籍,并研究使用 LUA 作为规则处理器。
【讨论】:
【参考方案3】:我个人会在代码中执行此操作,而不是在 SQL 中。每个项目都应该是实现接口的自己的类(即 IItem)。 IItem 将有一个名为 OkToPurchase 的方法来确定是否可以购买该项目。为此,它将使用您可以构建的一个或多个规则集合(即 HasPreviousPurchased(x)、CurrentlyOwns(x) 等)。
好处是很容易用新规则扩展这种方法,而不会破坏所有现有的逻辑。
这是一些伪代码:
bool OkToPurchase()
if( HasPreviouslyPurchased('x') && !CurrentlyOwns('y') )
return true;
else
return false;
bool HasPreviouslyPurchased( item )
return purchases.contains( item )
bool CurrentlyOwns( item )
return user.Items.contains( item )
【讨论】:
以上是关于存储逻辑规则的合适数据结构和数据库模式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构 这具体是啥意思啊