1

私がエンティティを持つERモデルを実装しようとしています:教師、学生、論文、関係:出版、助言。教師と学生の両方が論文を発表できますが、論文に助言できるのは教師だけです。生徒と教師の両方のパブリッシュ関係を複製する必要がありますか、それとも教師と生徒の間に関係がない 3 方向の関係のように見せることはできますか?

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 に答える