電子書籍の厳選無料作品が豊富!

はじめまして。
データベースの設計で困っています。

例えば、
学生[学生A / 学生B / 学生C]
部活[サッカー / 野球 / テニス]
とデータがあり、学生は部活のどれかに属します。(二重所属可)

これをデータベースで1つのテーブルで表すと、以下のようになると思うのですが、どちらのカラムも重複が発生します。

使用上問題なさそうなのですが、このような設計は良くないですか?

┌-------┬------┐
| 部活 | 学生 |
├-------┼------┤
|サッカー| 学生A |
├-------┼------┤
|サッカー| 学生B |
├-------┼------┤
| 野球 | 学生A |
├-------┼------┤
| テニス | 学生C |
└---------------┘

詳しい方、ご教授下さいますようお願いしますm(_ _)m

A 回答 (5件)

>これなら、所属部活(学生番号、部活番号)の学生番号が何度出現しても、部活番号が何度出現しても、問題ないということですよね??



問題ありません。
通常N:Nのリレーションシップの場合は、今回のようにします。
もちろん第3のテーブルの主キーは学生番号+部活番号です。
したがって、学生番号+部活番号の組み合わせは重複できませんので念のため。
    • good
    • 0

#2です。


3つめのDBの説明に誤りがあります。

#3さんの回答が妥当だと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
訂正までありがとうございます。
参考になりました。

お礼日時:2009/02/25 23:58

学生表、部活表が存在する上で第3のテーブルを作るという意味で書かれているのであれば、問題ありません。



そうでなくて、学生表・部活表の代わりに上記のようなテーブルを作ろうとされているのであれば、
このような文字列を主キーにするデザインはいいデザインとはいえないでしょう。

学生表、部活表は通常カラムは1つではないはずです。
例えば学生 (学生番号、氏名、住所、クラス)、部活(部活番号、部活名、担当教員)など。

ただ、仮にカラムが1つしかなくても、
学生(学生番号、氏名)
部活(部活番号、部活名)
所属部活(学生番号、部活番号)
とする方が通常かと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
第3のテーブルになります。
これなら、所属部活(学生番号、部活番号)の
学生番号が何度出現しても、
部活番号が何度出現しても、
問題ないということですよね??

お礼日時:2009/02/25 23:57

学生テーブルにキーと学生名、部活テーブルにキーと部活名


まず上述の二つのDBを作ります。
次に学生キーと部活キーを持つ三つめのDBを作ることで、
二つのDBを関連づけられます。
このDBは学生キーの重複を許可せず、部活キーの重複は許可します。

こんなところでいかがでしょうか。
    • good
    • 0

これはリレーショナルデータベースの標準的な表で問題ありません。


しいて言えば普通、キー項目となる学生を左にするでしょう。
これに「部活表」とでも名づければいいでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
このテーブルには、キーがない(もしくはどちらもキーとなる)としたいです。どちらにも同じ内容が入り得るので。

お礼日時:2009/02/25 23:53

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

関連するカテゴリからQ&Aを探す


おすすめ情報