在关系数据库中表示规则的类似输入的最佳方法是什么?

问题描述

我正在设计一个规则数据库,它接受大量输入并确定适当的输出

有一组约 20 种非常相似的输入类型(可以用 Id、Value 表示),它们都驱动一组约 20 种输出类型。每个输入类型都有许多可能的值。每种输出类型也有许多可能的值。

示例规则是 InputTypeA + InputTypeB determines OutputTypeAInputTypeA determines OutputTypeBn 输入类型可以驱动输出,但目前最大数量为 3。

  1. 存储输入值的最佳方式是什么?我正在考虑:
  • 存储在一个表中,使用 InputType 表 FK 来确定输入值的类型(从数据库类型的角度来看,它们都是字符串)。
  • 将每种输入类型存储在单独的表中。
  1. 我如何表示这些关系?我可以为每个关系创建一个单独的表,但这个系统应该尽可能灵活。我担心会出现大量表格,并且难以添加新规则。

解决方法

我认为这是 3 个主要概念。

条件:触发规则需要满足什么条件? 规则:当规则触发时,哪些结果为真? 结果:哪个输出火,哪个值?

条件被建模为一个或多个输入及其值(您的示例使用 InputTypeA + InputTypeB,因此我假设规则具有一个或多个符合条件的输入)。

结果被建模为一个或多个输出及其值。

特别是:

Condition
-----------
ID
RuleID
InputType
InputValue

Rule
----
ID

Result
-------
ID
RuleID
OutputType
OutputValue

如果输入类型和输出类型的逻辑比较多,可以创建一个有外键关系的查找表。

示例可能是:

条件

ID RuleID InputType         InputValue
1       1 DrivingIn30zone            1
2       1 CurrentSpeed              40

Rule

ID   Name
1    Don't break the speed limit

Result
ID    RuleID    OutputType    OutputValue
1.         1     SetSpeed              29

然后,您将搜索与当前输入值匹配的条件,以查看输出状态:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...