1

尝试实现一个 ER 模型,其中我有实体:老师、学生、论文和关系:发布、建议。老师和学生都可以发表论文,但只有老师可以建议论文。我应该为学生和老师复制发布关系,还是可以让它看起来像一个没有老师和学生关系的三向关系?

4

1 回答 1

1

听起来你可以像这样建模:

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。

缺点是这不允许从贡献者到学生/教师的外键,并且你没有从顾问到教师的严格约束。表 advisor(teacher_id, paper_id) 允许对顾问进行约束,但仍然不允许对学生 ID 进行约束或外键。

另一种选择可能是将其分解为:

teacher_contribution(teacher_id, paper_id, is_adviser)
student_contribution(student_id, paper_id)

这将允许将数据库完全约束到预期的模型,但在某些情况下可能更难以查询。

任何都可以接受。这在某种程度上取决于您的特定应用程序以及您打算如何查询数据。

于 2014-02-19T20:50:08.843 回答