目前正在构建一个系统,允许站点管理员构建自定义步骤问卷。主要实体是 steps
和 step_options
。 Step
是问卷中的实际步骤 step_options
是可以在该步骤中选择的选项。
sub-steps
的概念是一个步骤如何作为另一个步骤的子步骤附加。 sub-steps
也可以附加到 step-option
。
这让我在选项和步骤之间存在一些循环依赖。
- 一个步骤
有很多
选项 - 一个步骤可以
属于
一个步骤 - 一个步骤可以
属于
一个选项
所以一个步骤既有很多,也可能属于一个选项。目前这是我的表结构。
steps:
- id
- title
- parent_id (step_id)
- option_id
...
step_options:
- id
- step_id
- name
...
这是解决此问题的正确方法吗?我还考虑过为属于选项的步骤添加一个中间表 (option_step)。我有点费劲的一件事是查询所有“根”步骤,这些步骤没有 parent_id
或 option_id
,以及它们的所有选项和属于选项的步骤。
最佳答案
模型看起来不错。这是一个经典的层次模型,例如员工和经理。
- 为什么在步骤表中有 option_id?您可以使用 (where step_id = step.id) 查询 option_step 表以获取多个选项。我假设每个 step_option 都是唯一的。并且 step_option 不能属于多个步骤。
替代方法是说您有一些对几个步骤通用的“选项”。如果是这种情况,您可以创建一个新对象 option_group 作为
id PK of option_group
然后在“step_options”中而不是 step_id 中放置 option_group_id。
现在在“步骤”表中,您也可以提及 option_group_id。
通过以上内容,您可以开始在几个步骤中共享选项集合。
关于sql - 相同表之间的 2 种不同类型的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55483995/