2016-05-11 18 views
0

を持つテーブルを作成します。私の場合はは、私はテーブルを持って構成される主キー

course 
--------- 
id_course 
id_groupe (references a table named group) 
id_module (references a table named module) 

コースは、多くのグループで共有することができます。

私の質問は:

  • (id_course、id_group)で構成される主キーを選択することが正しいのですか?
  • 同じテーブルを作成する他の方法はありますか?
+0

.. –

答えて

0

はコースが別の属性があることを前提としています - そのタイトルを。

質問自問してください:それは、「グループA」または「B群」のメンバーによって取られている場合

が進路変更のタイトルは?ほとんどの機関の

、コースが設定されたタイトルを持つことになりますし、あなたがすべてのコース/グループの組み合わせ間でタイトルを複製する必要がありますあなたのテーブル構造を持つので、そのコースを受講するとの概念を壊している人は関係ありません。データベースの正規化。

次の2つのテーブルにテーブルより良い分割のようになります。そして、あなたがコースのタイトルを設定することができますし、それが当然に関連付けられたグループとは無関係です

course 
--------- 
id_course (Primary Key) 
title 

course_group 
------------ 
id_course (FK referencing course) } composite PK 
id_groupe (FK referencing groupe) } 

。もちろん、一意性を強制するための両方のIDで構成されるcourse_groupテーブルに複合主キーを持たせることができます。私は、Oracle 11gので働いています

+0

(id_course、id_groupe)ありがとう、この方法による学習できないanytingをしようとしませんでしたどちらもcourse_groupテーブルの合成主キーですか? –

+0

はい - コース/グループのペア設定を一意に識別しているようです。しかし、次のようにすることができます: 'CREATE TABLE course_group(id INT PRIMARY KEY、id_course INT NOT NULL REFERENCESコース(id_course)、id_groupe INT NOT NULL REFERENCES groupe(id_groupe)、CONSTRAINT course_group__u UNIQUE(id_course、id_groupe));コンポジット・プライマリ・キーを持つのではなく、ユニークな制約が必要です。 – MT0

+0

これは非常に良い答えです@ MT0ありがとう –

0

多くのグループで共有されるコースがある場合、私はゆるやかに異なるデザインを考えていて、コースとグループを結ぶリレーションテーブルを持っています。この表には2つのforeingキー列に基づいて、複合PKを持つことができます:

COURSE 
    id_course PK 
    id_module KF references MODULE 

MODULE 
    id_module PK 

GROUPE 
    id_groupe PK 

COURSE_REL_GROUPE 
    id_course FK references COURSE 
    id_groupe FK references GROUPE 
    PRIMARY KEY (id__course, id_groupe) 
+0

はそれをしないでください、彼はある.Heは –

+0

@Aleksej は非常に –

関連する問題