データベース第3回目 意味ごとにテーブルを分ける 2003年7月3日 by CreW 前回の復習(前回の目標) • Javaのプログラムからデータベースを使 える JDBCとは何か,説明できる • JDBCとは?JDBCドライバとは? JDBCを使えるようになる • JDBCの主要なクラスは? 前回の復習(前回学んだこと) • Javaプログラムから テーブルにデータを挿入する方法 テーブルに入っている情報を取得する方法 今回の目標 • テーブルを意味によって分ける理由が分か る • 2つのテーブルを関連付ける方法がわかる 今回変更する点 • 前回の「サブゼミ疑問だらけ掲示板」は 全員に共通した「入室パスワード」で入 室できた. • 今回は投稿者ごとに異なったログイン名 とパスワードによって入室可能にしたい. テーブルを設計する • 先週のテーブルに新たな項目を追加した depar grade contri login tment butor title conte date nt pass word どのようにデータが格納されるでしょうか 実はこの設計には問題があります このテーブルの問題を 整理しよう • 投稿者の新規作成をする毎に情報のないデータ • (タイトル,内容,投稿日)が存在する 情報が重複している(投稿するごとにログイン 名とパスワードを格納するのは非効率) 意味の違う情報が同じテーブルで管理されて いるから使いにくい 問題点を検証してみよう • 武田林太郎さんが投稿者登録をして発言する • 実際にテーブルを作って操作してみよう depar grade contri login … tment butor … 総合政 策学部 4年 武田林 太郎 title … s00581 null rt conte date pass … word… nt… null null ①新規ユーザ登録をする ②投稿する このように格納するしかありません! rintaro テーブルに意味を持たせる • ここでの問題は,意味の違う情報が一つ のテーブルにあることです 扱うデータを整理しましょう 質問掲示板で扱うデータは、 • 投稿者情報 学部名,学年,投稿者名,ログイン名,パスワード • 投稿情報 タイトル,内容,投稿日 これらを格納できるようにテーブルを作りま しょう 意味ごとに テーブルを分けよう • 投稿者情報と投稿情報は別々テーブルて 管理しよう 投稿者情報 学部名 学年 投稿者 ログイン名 投稿情報 タイトル 内容 投稿日 パスワード 意味ごとにテーブルを分けなかった 場合の問題 • 意味ごとにテーブルを分けなかったらど んな問題があるでしょう? 意味ごとにテーブルを分けなかった 場合の問題 • ほかにもこんな問題が考えられます 情報に重複が出る (投稿の毎に会員の情報を入れている) 変更がとても大変 (例:100回発言した会員が、メールアドレ スを変更したくなったら??) 意味ごとにテーブルを 分けたけど・・ • それぞれの投稿情報は投稿毎に誰が投稿 したのかを知っていないといけない • 2つのテーブル間に関連が必要 学部名 学年 タイトル 投稿者 内容 ログイン名 投稿日 パスワード どの列で関連を もたせればいいのか 投稿情報は、投稿者情報から一人の投稿 者を特定したい 投稿情報は、投稿者情報のユニークな値 を持つ列項目をもって関連成立したい テーブル間で関連をもたせる • 2つのテーブルで同じ値をとる列で関連をも • たせる 投稿情報テーブルが投稿した投稿者を特定し たいので投稿者情報テーブルのいずれかの列 をもてば関連が成立する 学部 総合政策学部 ログイン名 s00581rt 学年 4年 投稿者 武田林太郎 ログイン名 s00581rt タイトル 内容 Javaについて 分からない点が.. パスワード rintaro 投稿日 7/2 主キーという概念 • 今回の場合のようにテーブルの行を特定したく • • • なった場合に、行を一意に識別するための情報 が必要になる これを、主キーという 主キーとは、テーブルの中で行を特定するため の情報であり、列を割り当てて用いる 主キーはユニーか値を持つ列でなければならな い 投稿情報は投稿者情報の主キーをもつこ とで投稿者を特定できるようになる • 投稿者名は主キーになれるか? 同姓同名の投稿者がいると投稿者を特定できないので だめ • パスワードは主キーになれるか? 万が一同じパスワードをもつ投稿者がいたらどちらか 一方かを特定できないのでだめ • ログイン名は主キーになれるか? ログイン名は投稿者ごとに違うもの(ユニーク)なの で主キーになれる ログイン名で関連をもたせる • 投稿情報は投稿者情報の主キーであるロ グイン名をもって2つのテーブルを関連付 けることによって投稿者を特定できるよ うになった 今回の目標(再確認) • テーブルを意味によって分ける理由が分か る テーブルを意味によって分けるといいことは どんなことでしたか? • 2つのテーブルを関連付ける方法がわかる 2つのテーブルを関連付けるにはどうしたら よかったですか? 実感しよう • では,実際に2つのテーブルになった質 • • • • 問掲示板を実行しましょう http://web.sfc.keio.ac.jp/~s00581rt/crew/ 上からソースコードを入手 テーブル(.sqlファイル)は自動でサンプル のテーブルを作成します mysql questionbbs < sqlファイル名 2つのテーブル情報 • 2つのテーブル contributordata3 department grade contributor 総合政策学部 4年 login password 武田林太郎 s00581rt rintaro questiondata3 login title s00581rt Javaについて content 分からない点が.. date 7/2 課題 • 投稿できるようにしましょう • 発展課題は,投稿者の新規作成です
© Copyright 2024 ExpyDoc