尝试实现一个ER模型,其中我有实体:教师,学生,论文和关系:发布,建议。教师和学生都可以发表论文,但只有教师才能为论文提供建议。我应该复制学生和老师的发布关系,还是可以让它看起来像是三方关系,老师和学生之间没有关系?
听起来你可以像这样建模:
student(student_id, name, etc)
teacher(teacher_id, name, etc)
paper(paper_id, title, text, etc)
contributor(contributor_id, paper_id, contribution_type, contributor_type)
其中贡献类型是枚举(发布者,顾问),类似的贡献者类型是枚举(老师,学生)...或布尔值is_publisher,is_adviser。
缺点是这不允许外键从贡献者到学生/教师,并且您没有从顾问到教师的严格约束。 表顾问(teacher_id,paper_id)允许对顾问进行约束,但仍然不允许对学生 ID 进行约束或外键。
另一种选择可能是将其分解为:
teacher_contribution(teacher_id, paper_id, is_adviser)
student_contribution(student_id, paper_id)
这将允许将数据库完全限制在预期的模型中,但在某些情况下可能更难查询。
任何都可以接受。 这在一定程度上取决于您的特定应用程序以及您打算如何查询数据。