2016-06-14 8 views
0

私は、学生、教授、エッセイの3つのエンティティを持っています。モデリング:3つのテーブルの関係

状況:学生教授の監督の下でessay_topicにはいくつかのエッセイを書くことができます。 (太字:エンティティ)

しかし、彼らは特定の教授の監督下でのみエッセイを書くことができます。 (同じ教授の2倍ではない) と同じ essay_topicを使ってエッセイを書くことができます。

これは唯一の制限ですが、教授は同じessay_topicでいくつかの学生を監督できます。異なる教授は、同じエッセイを用いて異なる学生を監督することができます。

私たちには関係エッセイ(StudentID、EssayTopicID、ProfessorID)があります。 しかし、私は主キーが何であるかはわかりません。それとも、私たちはここにどんな関係を持っていますか?私はn:1:1(モデル)を推測するだろう。しかし、StudentIDだけがそのテーブルの主キーになります - 実際に間違っているのは、学生が1つのエッセイを書くことしかできないからです...

+0

生徒IDと教授IDに共通のキー制約がある3つのすべてを結合した非正規化テーブルを持つStudentテーブル、Essayテーブル、Professorテーブルを持ちます。 –

答えて

0

あなたの制限のための機能の依存関係を書き留めた場合、それは状況を理解するのに役立ちます:

(student, essay_topic) -> professor 
(student, professor) -> essay_topic 

あなたは2つの重複候補キー持っている - (student, essay_topic)(student, professor)を。ある物理モデルのプライマリ・キーとして、どちらか一方を選択できます。一方の制約には他の制約を追加します。

これはERで正確にモデル化できない状況であると思われます(はい、ERはリレーショナルモデルとは異なり完全なデータモデルではありません)。私は基数指標を除外し、FDをコメントとして含めることにしました。

PS。エンティティ間の関係をテーブル間の関係に混同しないでください。エンティティ間の関係は、(通常は異なる)エンティティセット間の関連付けとしてINテーブルに記録されます。テーブル間の関係は外部キーの制約であり、同じエンティティセットの2つの列に対してサブセット制限を強制します。

0

学生ごとに複数の等級のトピックと教授を追加できないようにしたい場合、 student_id + topic_id + professor_idに対する複合キー/複合制約が必要です。この質問を見てください: How do I specify unique constraint for multiple columns in MySQL?

+0

ありがとうございます。しかし、私が疑問に思うのは、エンティティリレーションシップモデルのように見えるでしょうか? – ScientiaEtVeritas

+0

あなたのためにERダイアグラムを生成したいのですか? – Drew

+0

私が理解するように、あなたは少なくとも4つのテーブルを持っています:学生、トピック、教授とエッセイ。私の場合、エッセイはstudent_id、topic_id、professor_idを外部キーとして持っています。 – Marat

関連する問題