成績管理DBを作っています。わからないことがあるので教えてください。
Aテーブル
No(主キー)
名前
住所
TEL
成績
とあります。
「成績」レコードですが、これまでの履歴もちゃんと保存していきたいと考えております。
その場合、もう一つ下記のようなテーブルを作ってみました。
Bテーブル
ID(とりあえず主キーを設定するため)
No.
国語
数学
理科
社会
AテーブルとBテーブルの「No.」でリレーションシップを設定。
質問なんですが、こんな(変な)やり方でいけるでしょうか?別の効率のよい方法があったら教えてください。
※テーブルの概念を言葉で伝えるのは本当に難しいですね。補足がありましたら入れてください。
No.3ベストアンサー
- 回答日時:
すいません。
#1のangbandです。もし試しに作られるのでしたら、Cテーブルに、Bテーブル
のIDが必要です。抜けてました。
正規化はちょっとややこしいかもしれませんが、
簡単に説明してみます。
第一正規形にするという場合は、要するに1レコードに
繰り返す値があってはだめ、ということです。点数や
教科は生徒一人あたり複数でてくる項目なので分けましょう
というのが第一正規化です。さらにぶっちゃけていえば
生徒一人あたり1つしかないもの(名前、生年月日など)
はあってもOKです。生徒一人に複数あるものは別テーブル
へというのが第一正規化ですね。
ここまでだけでも教科が増えたり、テスト回数が増えても
OKになっていますね。
第二正規化は、レコードを縦に見て、IDや数値以外で
同じものがあってはだめということです。他のテーブルの
IDや、テストの点数、年齢などは同じでも仕方ないです。
第三正規化は、レコードごとに比較してみて、レコード内
に連動して変化する値があってはだめ、ということです。
具体的には今回ならば、もし郵便番号と住所などがあれば
それが第三正規化でひっかかります。なぜこれがだめなの
かというと、生徒に兄弟がいる場合などに同じ住所に
なる場合があるはずです。となれば生徒と住所は1対1の
関係になく、1住所に複数の生徒が対応しているという
ことなので、テーブルをわけるべきだということなのです。
正規化の説明って難しいですね・・
再回答ありがとうございます。いま鋭意製作中なんですが難しいですね^^;。正規化の意味を理解したつもりなんですが、リレーションを作成するとどうしても思うように動かないんですよね。No2の方の方法もいい線行くんですが、多少思惑とずれたりします。
まだがんばってやってみたいと思います。必ずご報告致します。
No.2
- 回答日時:
一つにまとめて
名前
住所
Tel
実施日
国語
算数
理科
社会
成績
テーブルにします。直感的にわかりやすいでしょう。
データが増えてきたら、これをアクセスの正規化にかけます。
すると、#1のような正規化されたテーブルが出来上がります。
この方法は、正規化がわかりにくい人にとって便利です。
回答ありがとうございます。とても参考になりました。
そんな方法は知りませんでした。
まだ検証できてないので検証次第、返信申し上げます。
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:テストの成績
-----------------------------------------------
のようにすれば何年でも使えますし、一応正規化できて
ますね。必要な項目が分かればもっと正しい正規化が
できると思いますよ!がんばってくださいね。
回答ありがとうございます。
すばらしいテーブル構成ですね。まだ私には理解できない部分があります。作ってこれから検証しようと思います。
正規化をかじってみましたが、どんどんむずかしくなるのですね。
>誰が作ってもほぼ同じ構造になるルールがあります
そんなことも知らずデータベースを作っていました。面白いことを聞きました。
まだ検証中なので検証できたら再回答したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- MySQL 三科目合計点のクラス別平均点求めるクエリ式を教えてください 1 2023/07/04 09:44
- Oracle SQL update方法 2 2022/06/22 14:07
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(データベース) accessについて 2 2022/05/31 16:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルリンク リンク元を知...
-
会社の飲み会の幹事になり、座...
-
件数の多い順にselect
-
外部キーだけのテーブル(主キ...
-
男性と2人で飲食店に行きテーブ...
-
JavaScriptでAccessのテーブル...
-
「テーブルに座って……」という...
-
論理名とコメント構文(?)について
-
お金持ちのテーブル
-
Access データベースを分割した...
-
SYBASE12.5の行ロック
-
飲み会で、座敷orテーブルどち...
-
SQL 現在のレコードより古い番...
-
mysql alter table 終わらない
-
fetch_arrayでのエラー
-
このテーブルで
-
風水で丸いテーブルはあまりよ...
-
妹が、メルカリで売れた商品を...
-
1つのテーブルに同じデータを参...
-
面接のときテーブルが正面に。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
L2SWはARPテーブルを持っている?
-
テーブルリンク リンク元を知...
-
会社の飲み会の幹事になり、座...
-
外部キーだけのテーブル(主キ...
-
飲み会で、座敷orテーブルどち...
-
アクセスのリンクテーブル一覧...
-
複数テーブルにわたるCOUNT
-
男性と2人で飲食店に行きテーブ...
-
「テーブルに座って……」という...
-
複雑なSQL文について
-
まるいテーブル 円い 丸い 漢字...
-
お金持ちのテーブル
-
【PHP】SQL文のSUM関数で出力し...
-
論理名とコメント構文(?)について
-
1つのテーブルに同じデータを参...
-
1対1のリレーション(主キー同...
-
MySQLで複数テーブルを作成する
-
テーブルの白く剥がれてるところに
-
オーダーの覚え方について
-
面接のときテーブルが正面に。...
おすすめ情報