相同表之间的2种不同类型的关系

时间:2019-04-02 21:44:15

标签: sql postgresql

当前正在构建一个允许站点管理员构建自定义步骤调查表的系统。主要实体是stepsstep_optionsStep是调查表中的实际步骤step_options是可以在该步骤中选择的选项。

存在sub-steps的概念,这是一个步骤作为另一个步骤的子级附加的方式。也可以将sub-steps附加到step-option上。

这使我在选项和步骤之间有些循环依赖。

  • 步骤has-many选项
  • 一个步骤可以belong-to一个步骤
  • 一个步骤可以belong-to一个选项

因此,一个步骤有很多,并且可能属于一个选项。目前,这是我拥有的表结构。

steps:
- id
- title
- parent_id (step_id)
- option_id
...

step_options:
- id
- step_id
- name
...

这是解决此问题的正确方法吗?我还考虑过可能要为步骤添加一个中间表(option_step),而不是属于一个选项。我有些挣扎的事情之一是查询所有“根”步骤,即没有parent_idoption_id的步骤及其所有选项以及属于这些选项的步骤

1 个答案:

答案 0 :(得分:0)

模型看起来不错。这是经典的分层模型,例如员工和经理。

  • 为什么在步骤表中有option_id?您可以使用(其中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。

通过上面的步骤,您可以在几个步骤中开始共享选项集。