ruby-on-rails Rails数据模型问题:我应该有可选外键或连接表吗?

llmtgqce  于 2023-01-10  发布在  Ruby
关注(0)|答案(2)|浏览(100)

我有一个Rails应用程序,其中包括用于调查和(调查)问题的表格。

  • 一项调查有_许多问题
  • 问题属于调查

调查本质上是教师调查,现在我们引入学生调查,它与教师调查有着显著的不同,我们需要存储关于他们的不同类型的信息,这样他们似乎都有自己的表/模型,所以我想我们需要为教师调查和学生调查提供单独的表。
然而,问题实际上几乎是相同的。包括问题文本,问题类型(文本,复选框,下拉列表)等。所以似乎问题应该保持在一个单一的表。
如何最好地对此数据建模?

  • 问题表是否应该有teacher_survey_id和student_survey_id,其中每个都是可选的,但其中一个是必需的?
  • 我应该为questions_teacher_survey和questions_student_survey创建连接表吗?
  • 还有别的吗?
j7dteeu8

j7dteeu81#

这个问题没有简单的答案,将questions分成student_questionteach_question表确实意味着您有一点重复,并且如果这一点很重要的话,您不能将它们作为同质化的集合来查询。
通过使用继承或组合可以非常简单地解决代码重复问题,但这会增加维护负担/复杂性成本。
但它确实有一个优点,即如果选择使用多态关联,则可以从不可空的外键列中获得引用完整性的保证,而无需创建数据库触发器或缺少真实的的外键约束。
另一个潜在的优点是,如果需求不同,您可以查询较小的表,这些表可以保持密集而不是稀疏。

91zkwejq

91zkwejq2#

听起来你需要让你的调查表多态,并添加一个类型列作为枚举:student和:teacher作为选项,你可以使用类型列作为一个标志来控制不同的业务逻辑.一旦调查表成为多态,你可能不需要做任何事情与你的问题表.如果你决定用这个解决方案,它也建议添加一个concern class named Surveyable来保持所需的关联和共享逻辑之间的调查模型(在你的情况下学生和教师).

相关问题