如何为 if-else-then 条件设计数据库架构

how to design db schema for if-else-then condition

提问人:destiny1616 提问时间:10/25/2023 最后编辑:dbuggerdestiny1616 更新时间:10/26/2023 访问量:42

问:

首先,我提前为我的英语不好感到抱歉。很难理解我想说什么,但我会尽力解释我想问的。

**我的问题是如何设计 if-else-then 条件数据库架构。以下是详细信息。 **

我想根据用户的回答制作一种路由系统。当我向用户发送查询表单时,用户回答问题时,我的系统会根据用户的回答将用户发送到一个链接。

例如,有两个问题,

  1. 你的年龄范围是多少?
  • 答:20-30
  • 生于30-40岁
  • 约40-50
  1. 你叫什么名字?

如果或然后转到question1's answer is aquestion1's answer is bA Link

如果,然后转到question1's answer is cquestion2' answer contains 'kevin'B Link

我不知道如何为这些条件设计数据库。

我有 2 个模型。但这只是临时建模。

routes

id | destination_type | destination_url  | rules            |
-------------------------------------------------------------
1  | external_url     | https://a.com    | Idon't have idea |

// if user's answer matches with rules, then send user to destination_url
question

id | kind   | label                 | options                |
--------------------------------------------------------------
1  | radio  | what's your age range | [{value: '20-30'},...] |
2  | name   | name                  | {}                     |

我想为规则设计数据库表,但如果除了设计数据库之外还有其他想法,那就没关系了。

Ruby-on-Rails 数据库 模式 建模

评论

2赞 zaphodbln_ 10/25/2023
您能详细说明一下为什么要在数据库中设置规则吗?这可能有助于提供更好的答案。对于条件,您应该知道要提供哪些选项。在某些 SQL 行中设计一个完全灵活的规则手册是相当复杂的
1赞 zaphodbln_ 10/25/2023
为了让事情变得更容易,你可以在谷歌上搜索“业务规则引擎”——这样做,我找到了这个宝石:github.com/azach/rules - 也许这就是你要找的
0赞 destiny1616 11/8/2023
@zaphodbln_非常感谢您的回复!!我在谷歌上搜索了业务规则引擎,发现 github.com/ulfurinn/wongi-engine 看起来仍在维护中并且效果很好。非常感谢您的帮助!

答:

0赞 Julian 10/26/2023 #1

我认为将重定向链接放在数据库中会破坏 rail 中应用的 MVC 逻辑。

您在文本中表述的条件对我来说听起来像是控制器逻辑,例如

AnswerController
  def a
    if things
      redirect_to a_path
    else
      redirect_to b_path
    end
  end
end

但是,如果你真的尝试在数据库中制作这个完全动态的(也就是完整的逻辑),你可以考虑将 medhod 调用作为属性放在 datebase 中,并在方法或其他东西中使用或redirect_to“my_string_on_answer_a”。Question.my_string_on_answer_amy_question.send(my_question.my_string_on_answer_a)Controller

最后,听起来您喜欢将路由目标放在数据库中。这很不起眼。

在 ruby 中发送一些东西就像调用/调用方法一样。my_object

我最近用它来动态调用方法。我在模型中实现了表单的行。Tho “rows” 可以由 或object.send("r123")object.send("r54")

相应地调用方法,例如或object.r123object.r54

你的问题很抽象。对不起,如果我的答案太抽象,你无法直接实现,但至少应该值得深思!很高兴进一步讨论。

还请注意,数据库中也有布尔属性。也许这让事情变得更容易,但 100% 不确定。

评论

0赞 destiny1616 11/8/2023
@Juilan 非常感谢您的友好回答!!这真的很有帮助。谢谢!!
0赞 Julian 11/9/2023
@destiny1616我的回答对你有帮助,真是太好了!我以为我的答案可能是学术或其他什么。如果你能投票支持我的答案,那就太棒了。想要获得 stackoverflow 积分,因为我的投票由于积分不足而在 stackoverflow 上尚未被接受!非常感谢!