• ベストアンサー

ACCESSで成績管理

成績管理DBを作っています。わからないことがあるので教えてください。 Aテーブル No(主キー) 名前 住所 TEL 成績 とあります。 「成績」レコードですが、これまでの履歴もちゃんと保存していきたいと考えております。 その場合、もう一つ下記のようなテーブルを作ってみました。 Bテーブル ID(とりあえず主キーを設定するため) No. 国語 数学 理科 社会 AテーブルとBテーブルの「No.」でリレーションシップを設定。 質問なんですが、こんな(変な)やり方でいけるでしょうか?別の効率のよい方法があったら教えてください。 ※テーブルの概念を言葉で伝えるのは本当に難しいですね。補足がありましたら入れてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • angband
  • ベストアンサー率51% (86/168)
回答No.3

すいません。#1のangbandです。 もし試しに作られるのでしたら、Cテーブルに、Bテーブル のIDが必要です。抜けてました。 正規化はちょっとややこしいかもしれませんが、 簡単に説明してみます。 第一正規形にするという場合は、要するに1レコードに 繰り返す値があってはだめ、ということです。点数や 教科は生徒一人あたり複数でてくる項目なので分けましょう というのが第一正規化です。さらにぶっちゃけていえば 生徒一人あたり1つしかないもの(名前、生年月日など) はあってもOKです。生徒一人に複数あるものは別テーブル へというのが第一正規化ですね。 ここまでだけでも教科が増えたり、テスト回数が増えても OKになっていますね。 第二正規化は、レコードを縦に見て、IDや数値以外で 同じものがあってはだめということです。他のテーブルの IDや、テストの点数、年齢などは同じでも仕方ないです。 第三正規化は、レコードごとに比較してみて、レコード内 に連動して変化する値があってはだめ、ということです。 具体的には今回ならば、もし郵便番号と住所などがあれば それが第三正規化でひっかかります。なぜこれがだめなの かというと、生徒に兄弟がいる場合などに同じ住所に なる場合があるはずです。となれば生徒と住所は1対1の 関係になく、1住所に複数の生徒が対応しているという ことなので、テーブルをわけるべきだということなのです。 正規化の説明って難しいですね・・

Scotty_99
質問者

お礼

再回答ありがとうございます。いま鋭意製作中なんですが難しいですね^^;。正規化の意味を理解したつもりなんですが、リレーションを作成するとどうしても思うように動かないんですよね。No2の方の方法もいい線行くんですが、多少思惑とずれたりします。 まだがんばってやってみたいと思います。必ずご報告致します。

その他の回答 (2)

  • nika
  • ベストアンサー率14% (66/470)
回答No.2

一つにまとめて 名前 住所 Tel 実施日 国語 算数 理科 社会 成績 テーブルにします。直感的にわかりやすいでしょう。 データが増えてきたら、これをアクセスの正規化にかけます。 すると、#1のような正規化されたテーブルが出来上がります。 この方法は、正規化がわかりにくい人にとって便利です。

Scotty_99
質問者

お礼

回答ありがとうございます。とても参考になりました。 そんな方法は知りませんでした。 まだ検証できてないので検証次第、返信申し上げます。

  • angband
  • ベストアンサー率51% (86/168)
回答No.1

ちょっときついと思います。 お勧めは「正規化」というキーワードでgoogleで調べて みてください。おそらくそこに答えがあります。テーブル は誰が作ってもほぼ同じ構造になるルールがあります。 一案ですが、 ----------------------------------------------- Aテーブル:生徒名簿 ID kana lname:姓 fname:名 などの生徒固有の情報をAテーブルへ ----------------------------------------------- Bテーブル:教科テーブル ID name:教科名 ----------------------------------------------- Cテーブル:テストテーブル ID date:実施日 name:テスト名(中間、期末など) min:最低点 avg:平均点 max:最高点 ----------------------------------------------- Dテーブル:生徒テスト成績テーブル ID AのID BのID CのID num:テストの成績 ----------------------------------------------- のようにすれば何年でも使えますし、一応正規化できて ますね。必要な項目が分かればもっと正しい正規化が できると思いますよ!がんばってくださいね。

Scotty_99
質問者

お礼

回答ありがとうございます。 すばらしいテーブル構成ですね。まだ私には理解できない部分があります。作ってこれから検証しようと思います。 正規化をかじってみましたが、どんどんむずかしくなるのですね。 >誰が作ってもほぼ同じ構造になるルールがあります そんなことも知らずデータベースを作っていました。面白いことを聞きました。 まだ検証中なので検証できたら再回答したいと思います。

関連するQ&A