プロが教える店舗&オフィスのセキュリティ対策術

関係データベースを用い、学生の所属するサークル管理を行うことになった

そこで、以下のような項目を選択した。以下の関係をリレーショナルモデルのスキーマで表現しなさい
ただし、スキーマの項目は、学生、所属、サークルとする。主キーには下線がついている。

[クラブ](学生ID(下線),学生名、入学年度、サークルID(下線),サークル名)


以上の問題なのですが答えがいまいちわかりません。

自分でやってみた所
・学生
学生ID(主キー)、学生名、入学年度

・所属
学生ID(主キー)、サークル(ID)、学生名、サークル

・サークル
サークルID(主キー)、サークル名

こんな感じになったのですがどうでしょうか?
わかる方おねがいします。

A 回答 (3件)

多対多のリレーションについて、中間の所属テーブルで多対1対多の構成に分解して構築する意図の問題ですね。


ukiuku0904さんの考えた3つのエンティティで概ね合っていますが、
所属表は、学生名、サークルのアトリビュートは不要です。また、所属表のインデックスのための所属主キーがあった方がよいでしょう。

・学生表
学生ID(主キー)、学生名、入学年度

・所属表
所属主キー、 学生ID、    サークルID
       学生テーブル  サークルテーブル
       から矢印    から矢印

・サークル表
サークルID(主キー)、サークル名

と構築し、

SELECT *
FROM 所属表 INNER JOIN 学生表 ON 所属表.学生ID=学生表.学生ID

 などと操作して、リレーショナル型データベースの特性を生かした
活用を目論むことになります。
    • good
    • 0

多対多のリレーションを中間の所属テーブルで多対1対多の構成を構築する意図の問題ですね。


ukiuku0904さんの考えた3つのエンティティで概ね合っていますが、
所属表は、学生名、サークルのアトリビュートは不要です。

・学生表
学生ID(主キー)、学生名、入学年度

・所属表
学生ID(主キー)、 サークル(ID)
 学生テーブル  サークルテーブル
 から矢印    から矢印

・サークル表
サークルID(主キー)、サークル名

と構築し、

SELECT *
FROM 所属表 INNER JOIN 学生表 ON 所属表.学生ID=学生表.学生ID

 などと操作して、リレーショナル型データベースの特性を生かした
活用を目論むことになります。
    • good
    • 0

この質問は、


・関係クラブを正規化しなさい。ただし、1人の学生は複数のサークルに所属できるものとする。
というのと同じことです。

もともと第一正規形にはなっているので、部分関数従属をなくして第二正規化します。
そうすると、質問者さんがされたように「学生」、「サークル」という関係が分離されます。
もともとあった「クラブ」から「学生」「サークル」を除いたものが「所属」です。

・所属
学生ID(主キー)、サークルID(主キー)

今回の場合、第二正規化が完了すると、第三正規形の条件も満たしています。だから、これでできあがりです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!