Presentation is loading. Please wait.

Presentation is loading. Please wait.

データベース第3回目 意味ごとにテーブルを分ける

Similar presentations


Presentation on theme: "データベース第3回目 意味ごとにテーブルを分ける"— Presentation transcript:

1 データベース第3回目 意味ごとにテーブルを分ける
2003年7月3日 by CreW

2 前回の復習(前回の目標) Javaのプログラムからデータベースを使える JDBCとは何か,説明できる JDBCを使えるようになる

3 前回の復習(前回学んだこと) Javaプログラムから テーブルにデータを挿入する方法 テーブルに入っている情報を取得する方法

4 今回の目標 テーブルを意味によって分ける理由が分かる 2つのテーブルを関連付ける方法がわかる

5 今回変更する点 前回の「サブゼミ疑問だらけ掲示板」は全員に共通した「入室パスワード」で入室できた.
今回は投稿者ごとに異なったログイン名とパスワードによって入室可能にしたい.

6 テーブルを設計する 先週のテーブルに新たな項目を追加した どのようにデータが格納されるでしょうか 実はこの設計には問題があります
department grade contributor login title content date password どのようにデータが格納されるでしょうか 実はこの設計には問題があります

7 このテーブルの問題を 整理しよう 意味の違う情報が同じテーブルで管理されているから使いにくい
投稿者の新規作成をする毎に情報のないデータ(タイトル,内容,投稿日)が存在する 情報が重複している(投稿するごとにログイン名とパスワードを格納するのは非効率) 意味の違う情報が同じテーブルで管理されているから使いにくい

8 問題点を検証してみよう ①新規ユーザ登録をする ②投稿する このように格納するしかありません! 武田林太郎さんが投稿者登録をして発言する
実際にテーブルを作って操作してみよう department grade contributor login title content date password 総合政策学部 4年 武田林太郎 s00581rt null rintaro … … … … … … ①新規ユーザ登録をする ②投稿する このように格納するしかありません!

9 テーブルに意味を持たせる ここでの問題は,意味の違う情報が一つのテーブルにあることです

10 扱うデータを整理しましょう 質問掲示板で扱うデータは、 投稿者情報 投稿情報 これらを格納できるようにテーブルを作りましょう
学部名,学年,投稿者名,ログイン名,パスワード 投稿情報 タイトル,内容,投稿日 これらを格納できるようにテーブルを作りましょう

11 意味ごとに テーブルを分けよう 投稿者情報と投稿情報は別々テーブルて管理しよう 投稿者情報 学部名 学年 投稿者 ログイン名 パスワード
タイトル 内容 投稿日

12 意味ごとにテーブルを分けなかった 場合の問題
意味ごとにテーブルを分けなかったらどんな問題があるでしょう?

13 意味ごとにテーブルを分けなかった 場合の問題
ほかにもこんな問題が考えられます 情報に重複が出る (投稿の毎に会員の情報を入れている) 変更がとても大変  (例:100回発言した会員が、メールアドレスを変更したくなったら??)

14 意味ごとにテーブルを 分けたけど・・ それぞれの投稿情報は投稿毎に誰が投稿したのかを知っていないといけない 2つのテーブル間に関連が必要
学部名 学年 投稿者 ログイン名 パスワード タイトル 内容 投稿日

15 どの列で関連を もたせればいいのか 投稿情報は、投稿者情報から一人の投稿者を特定したい
 投稿情報は、投稿者情報から一人の投稿者を特定したい  投稿情報は、投稿者情報のユニークな値を持つ列項目をもって関連成立したい

16 テーブル間で関連をもたせる 2つのテーブルで同じ値をとる列で関連をもたせる
投稿情報テーブルが投稿した投稿者を特定したいので投稿者情報テーブルのいずれかの列をもてば関連が成立する 学部 学年 投稿者 ログイン名 パスワード 総合政策学部 4年 武田林太郎 s00581rt rintaro ログイン名 タイトル 内容 投稿日 s00581rt Javaについて 分からない点が.. 7/2

17 主キーという概念 今回の場合のようにテーブルの行を特定したくなった場合に、行を一意に識別するための情報が必要になる これを、主キーという
主キーとは、テーブルの中で行を特定するための情報であり、列を割り当てて用いる 主キーはユニーか値を持つ列でなければならない

18 投稿情報は投稿者情報の主キーをもつことで投稿者を特定できるようになる
投稿者名は主キーになれるか? 同姓同名の投稿者がいると投稿者を特定できないのでだめ パスワードは主キーになれるか? 万が一同じパスワードをもつ投稿者がいたらどちらか一方かを特定できないのでだめ ログイン名は主キーになれるか? ログイン名は投稿者ごとに違うもの(ユニーク)なので主キーになれる

19 ログイン名で関連をもたせる 投稿情報は投稿者情報の主キーであるログイン名をもって2つのテーブルを関連付けることによって投稿者を特定できるようになった

20 今回の目標(再確認) テーブルを意味によって分ける理由が分かる 2つのテーブルを関連付ける方法がわかる
テーブルを意味によって分けるといいことはどんなことでしたか? 2つのテーブルを関連付ける方法がわかる 2つのテーブルを関連付けるにはどうしたらよかったですか?

21 実感しよう では,実際に2つのテーブルになった質問掲示板を実行しましょう
上からソースコードを入手 テーブル(.sqlファイル)は自動でサンプルのテーブルを作成します mysql questionbbs < sqlファイル名

22 2つのテーブル情報 2つのテーブル rintaro contributordata3 questiondata3 department
grade contributor login password 総合政策学部 4年 武田林太郎 s00581rt rintaro questiondata3 login title content date s00581rt Javaについて 分からない点が.. 7/2

23 課題 投稿できるようにしましょう 発展課題は,投稿者の新規作成です


Download ppt "データベース第3回目 意味ごとにテーブルを分ける"

Similar presentations


Ads by Google