gpt4 book ai didi

php - 将逻辑表达式存储到 RDBMS 中的结构

转载 作者:行者123 更新时间:2023-11-29 20:57:32 25 4
gpt4 key购买 nike

考虑以下变量是由玩家分析器服务生成的:

    level = 6;
errors = 4;
score = 12;
...

我们有一些规则和信息:

 1. errors == 0 AND level > 5 : Senior player
2. score == 10 OR errors == 3: Border line player
3. score > 10 AND score < 13: Not good, just passed
4. ...

现在我们应该打印正确的消息。

另一个示例:考虑以下变量是由 food 分析器服务生成的:

    fruit = 2;
coca = 6;
...

我们有一些规则和信息:

 1. fruit == 0 : Consider buying some fruits
2. coca == 0: That's healthy
3. ...

现在我们应该打印正确的消息。

我应该如何在 MySQL 等 RDBMS 中保存规则和消息,以便轻松查询和查找消息。

最糟糕的方法是将规则保存在一列中,将消息保存在另一列中,然后加载每条记录以用主机编程语言进行测试。

enter image description here enter image description here

针对这种情况,您能提出更好的方法吗?当我们有几千条消息时,这不是一个好方法,我们需要一种在数据库端过滤消息的方法。

最佳答案

我创建了一个快速 ERD 来演示我最初是如何设计它的: enter image description here

所有这些列和表格的含义是什么?

属性名称

这包含可以检查其值的所有内容的列表。

  • property_id - 主键
  • property_name - 已存储值的项目的文本值。例如“错误”、“级别”、“水果”。

运算符

包含用于每个属性的不同运算符的列表。

  • operator_id - 主键。
  • operator_symbol - 检查值时使用的符号。我不确定实际的符号是否是存储在这里的最佳值,但它可以工作。例如“==”、“">”、“">=”。

rule_message

存储正在显示的实际消息。

  • rule_message_id - 主键
  • message - 要显示的消息文本。例如“高级玩家”、“考虑购买水果”。

operator_property

这是所有其他三个表之间的连接表,包含您的规则和逻辑。

  • property_operator_id - 主键。它称为代理键 - 如果您愿意,可以排除此列,并将 PK 设置为 (property_id、operator_id、rule_message_id)(如果您愿意)。
  • property_id - 正在使用的 property_name 记录(例如“错误”的 ID)
  • operator_id - 正在使用的运算符(operator)记录(例如“==”的 ID)
  • rule_message_id - 正在使用的rule_message(例如“高级玩家”的ID)
  • check_value - 根据运算符的属性检查的值。例如 6、4、12。

如何使用此设计:* 您可以将所有属性和运算符添加到表中。* 查找要为某个场景显示的消息,例如检查要为玩家显示的内容:

SELECT rn.rule_message_id, rm.message
FROM rule_message rm
INNER JOIN operator_property op ON rm.rule_message_id = op.rule_message_id
INNER JOIN property_Name pn ON op.property_id = pn.property_id
INNER JOIN operator o ON op.operator_id = o.operator_id
WHERE 1=1
AND (
pn.property_name = "errors"
AND pn.operator_symbol = "=="
AND op.check_value = 0
)
AND (
pn.property_name = "level"
AND pn.operator_symbol = "5"
AND op.check_value = 5
)

此查询理想情况下会返回 1 行。如果返回 0,则没有消息适用。如果它返回 2 或更多,则意味着它不完全符合您的条件之一,因此没有任何消息适用。

希望这有帮助!我有written articles on desigining databases在此之前,我能给您的最好建议是弄清楚数据的用途,您似乎已经知道了。

此外,如果您可以为表想出更好的名称,那就去吧 - 这只是一个快速设计来说明这一点。

关于php - 将逻辑表达式存储到 RDBMS 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com