2016-05-27 3 views
2

私はクラスのデータベースを設計しようとしています。各クラスには多くのグループがありますが、各グループには多くの学生がいます。 enter image description hereグループと学生のクラスのデザインデータベース

私はこのように2つの実体関係図を描きました。 図1の円の関係が表示されます。 クラス2に学生を追加するにはグループを追加する必要があります。クラスにグループがない場合は、クラスに追加することはできません。どのように私はこの状況のた​​めのデータベースを設計できますか?

+0

質問:1. 1人の学生が複数のグループに所属できますか? 2.学生はグループに属していないことができますか? – Piyg

+0

質問1現在の:いいえ、将来の多分質問2:はい – buggy3

答えて

1

最初の図には、循環機能の依存関係はありません。

Student -> Group (Belong to) 
Student -> Group (Manage) 
Group -> Student (Manage) 
Group -> Class (Has) 
Student -> Class (Belong to) 

クラスは、学生やグループを決定するものではありませんので、何の環状「の言及は、」存在しない:「1」側に「多く」の側からそれらを読んでください。

循環的な関係は、起こりうる異常を注意する必要があることを警告することができます。この場合、生徒から生徒までの2つのパスで生徒を異なるクラスに関連付けることはできません。あなたのデータが有効であることに注意する限り、循環関係は問題ではありません。

2番目の図では、すべてのクラスに少なくとも1つのグループがあるという規則を採用することができます(つまり、サブグループがない場合、クラス全体がグループとしてカウントされます)。このようにして、すべての学生はグループを介してクラスに関連付けられ、その関連付けを直接記録する必要はありません。

+1

私はむしろ、この時点ではダイアグラムがあいまいであると言います。 ER図から直接データベースを実装するのは危険です。伝統的に、物理モデルを準備して、すべての論理要件を確実に実装するようにします。アソシエーションを直接記録できるようにしながら、問題を軽減する物理的な実装(すなわち、非正規化および複合FK制約による)における完全性を処理する方法がある。 – reaanb

1

これらはあなたのDBのテーブルのようになります。

  1. クラステーブル:主キーはCLASSIDされるだろう。
  2. 学生テーブル:主キーStudentId、FK(外部キー)はClassIdとなります。
  3. グループテーブル:プライマリキーはGroupIdで、ClassIdがFKとして含まれます。
  4. Groups_Student table:このテーブルには、グループと学生のマッピングが含まれています。 FKはGroupIdとStudentIdになります。

上記のデザインは、複数のグループに属している、または全くグループに属していない学生をサポートしています。これは、グループがただ1つのクラスに関連付けられていることを前提としています。これはまた、生徒がただ一つのクラスに関連付けられていることを前提としています。

+0

ダイアグラム1のほとんどは(管理関係を除いて)実装されていますが、循環関係の混乱には対処していません。異常の可能性について警告する。 – reaanb

+0

フォローアップしていただきありがとうございます。 managementShip(1:1)の管理は、 "ManagingStudentId"をGroupテーブルに保存することで可能です。 1対2については、グループに所属することなく、クラスに所属する生徒のアイデアをサポートするので、1を優先しました。私は、私たちが回避する必要のある真の循環関係を見ません。 – Piyg

関連する問題