希望并祈祷你们都一定要好。
我有一个场景,我必须编写一组非常大的关系/组合数据,我正在寻找一种必须超快的实现技术。它就像AI中的专家系统。
我有4个实体,问题,选项,好处和方案:
现在我们举一个例子:
所以就这样
场景。其中 C 表示组合。
如果问题变为25,每个问题应该有5个选项
场景
我正在寻找将这种关系/组合数据存储到数据库并想要访问它的最佳方法。等待你们的反应。
答案 0 :(得分:0)
以下一组表格将会这样做。
question:
id
...
option:
id
question_id
...
option_scenario:
option_id
scenario_id
scenario:
id
option_count
...
scenario_benefit:
scenario_id
benefit_id
benefit:
id
...
设计中非规范化的一件事是scenario.option_count
应该是option_scenario
中具有scenario_id
的事物的数量。
要查询它,您需要大量使用子查询。假设person_option
是具有特定人具有的选项的另一个表。然后找到那个人你需要的好处:
SELECT b.*
FROM (
SELECT s.scenario_id
FROM person_option po
JOIN scenario_option so
ON so.option_id = po.option_id
JOIN scenario s
ON s.id = so.scenario_id
WHERE po.person_id = ?
GROUP BY so.scenario_id, s.option_count
HAVING s.option_count = COUNT(DISTINCT po.option_id)
) ps
JOIN scenario_benefit sb
ON sb.scenario_id = ps.scenario_id
JOIN benefit b
ON b.id = sb.benefit_id