chi*_*tom 6 database rdbms hibernate
如何使用RDBMS存储逻辑表达式?
我标记对象,并希望能够基于这些标记构建真值语句.(这些可能被视为虚拟标签.)
标签
new
for_sale
used
offer
规则
second_hand_goods = (!new or used) and for_sale
new_offer = new and offer
second_hand_offer = second_hand_goods and offer
你们如何在数据库中存储表达式和业务规则?
提前致谢.
更新
要清楚,规则不是由数据库在内部使用,而是由需要持久保存这些标记和规则的外部应用程序创建和使用.谢谢.
从实用的角度来看,如果计算所需的所有列都存在于同一个表中,则您可以在数据库上创建计算字段 - 计算字段只能从单个记录中工作。大多数现代 DBMS 平台都支持此功能。
从理论的角度来看,您正在进入语义数据建模。这方面最好的论文是 Hammer 和 MacLeodsRuritanian Oil Tankers
论文,它描述了一种被想象性地称为 SDM 的语义数据建模符号。SDM 使用结构化的英语类型符号来标记您描述的那种类型的数据库规则。如果您想概括您的能力并且不介意为 SDM 编写解析器,您可以制作一个可以配置此类逻辑的规则引擎。这种类型的模型也应该可以很好地适应 O/R 映射器。
不利的一面是,制作这种工具会非常耗时,因此只有当您对管理数据语义的需求非常大时才值得这样做。对于您引用的示例,它可以轻松地适应矫枉过正的领域,但如果您的问题要大得多,则可能值得构建这样的东西。如果您不想编写解析器,您可以创建一个 XML 模式来标记类似 SDM 的语言。
管理嵌套/括号会变得非常复杂并且容易出错。我过去这样做的方法是使用 XML 来定义逻辑,因为它可以很好地处理嵌套。使用 SQL Server 2005 或更高版本,您还可以将其很好地存储在单个表中。
您的二手商品逻辑可以存储为...
<logic type="and">
<logic type="or">
<logic type="not">
<value type="new" />
</logic>
<value type="used" />
</logic>
<value type="for_sale" />
</logic>
Run Code Online (Sandbox Code Playgroud)
很抱歉,这不是您问题的实际答案,而只是另一种做事方式。我刚刚发现它过去对我有用。
默认情况下,在我充分理解问题并找出解决方案之前,我不会将业务规则存储在数据库中。这些属于代码。然而,任何规则总是有例外,您可以使用 RDBMS 的存储过程和/或函数来封装这些规则(前提是您的数据库有它们)。但是,正如我所说,理想情况下,您会在代码中以有意义的方式解释数据。
更新
抱歉,我意识到我没有回答你的问题。您可以使用函数(如果您的数据库有)允许您传入参数并返回标量值,或者使用存储过程。每个表达式可能有 1 个,并且有一个更大的过程来以某种方式组合表达式。
归档时间: |
|
查看次数: |
9634 次 |
最近记录: |