我有一个Rails应用程序,其中包括用于调查和(调查)问题的表格。
- 一项调查有_许多问题
- 问题属于调查
调查本质上是教师调查,现在我们引入学生调查,它与教师调查有着显著的不同,我们需要存储关于他们的不同类型的信息,这样他们似乎都有自己的表/模型,所以我想我们需要为教师调查和学生调查提供单独的表。
然而,问题实际上几乎是相同的。包括问题文本,问题类型(文本,复选框,下拉列表)等。所以似乎问题应该保持在一个单一的表。
如何最好地对此数据建模?
- 问题表是否应该有teacher_survey_id和student_survey_id,其中每个都是可选的,但其中一个是必需的?
- 我应该为questions_teacher_survey和questions_student_survey创建连接表吗?
- 还有别的吗?
2条答案
按热度按时间j7dteeu81#
这个问题没有简单的答案,将
questions
分成student_question
和teach_question
表确实意味着您有一点重复,并且如果这一点很重要的话,您不能将它们作为同质化的集合来查询。通过使用继承或组合可以非常简单地解决代码重复问题,但这会增加维护负担/复杂性成本。
但它确实有一个优点,即如果选择使用多态关联,则可以从不可空的外键列中获得引用完整性的保证,而无需创建数据库触发器或缺少真实的的外键约束。
另一个潜在的优点是,如果需求不同,您可以查询较小的表,这些表可以保持密集而不是稀疏。
91zkwejq2#
听起来你需要让你的调查表多态,并添加一个类型列作为枚举:student和:teacher作为选项,你可以使用类型列作为一个标志来控制不同的业务逻辑.一旦调查表成为多态,你可能不需要做任何事情与你的问题表.如果你决定用这个解决方案,它也建议添加一个concern class named Surveyable来保持所需的关联和共享逻辑之间的调查模型(在你的情况下学生和教师).