Database Lecture 5/20
Database Lecture 5/20
前回の復習
- カード型データベース
- スプレッドシート
- データの変換 TSV, CSV, SYLK
- バッチ型のデータベース入出力
ニュースグループ
- ura.ie.classes.database に講義の資料や、問題の
答を出しているので参考にすること。
複数の表
例題のアンケートを毎年取ったとしよう。その二つの表を扱うには
どうすれば良いか?
- 二つの表のままにしておく
- 一つの大きな表にまとめる
- 共通な部分を別な表にする
名前と学籍番号の対応表を別に持った方が便利だ。(問い:何故か?)
- さらに小さな表に分割する
- どんどん細かくした方が便利なのか?
- 複数の答が入っているフィールドをどうする?
- 分割した時の行き先をどう指し示す? (ポインタ)
(問い: 二つのアンケートのいろいろな表の分割と結合を考えて、
その利点と欠点を考えよう。)
- 情報が落ちていないか?
- 余計なフィールド、無駄になっているフィールドがないか?
- データの追加/変更/削除は簡単か?
自分のコンピュータ
誰がどんなコンピュータを持っているかを表にして見よう。もしかすると、
10台コンピュータを持っている人がいるかも知れない。
関係データベース(Relational Database)では、一つのフィールドは一つの値しか
入らないとする。(第一正規形)
表を分割したり、お互いに関連づけたりするには
Key
関数は一つの入力に対して出力は一つ。表を関数として見るためには、
出力を決めるための最低限の入力が必要だ。その最低限の入力がKey
である。
関係データベース(Relational Database)では、一つの表には少なくとも
一つのKeyがあるとする。 (第二正規形)
レコードの中で他の表のデータを指し示したい時には、その表のKeyを
使えば良い。そのレコードの中で他の表のKeyを参照しているフィールドを
外部Key(Foreign Key)という。指し示した先がなかったりすると困るので、
そういうことがないようにしないといけない。(外部Key制約)
Keyといってもいろいろある。Keyとなるフィールドが一つあれば、それに
同じ表の任意のフィールドをつけ加えてもKeyになる。(あたりまえ) 普通は、
特に一つのフィールドをKeyにすると考えて、それを主Key(Primary Key)
という。
従属性
データベースの中に従属性を見つけよう。従属性があるものを
一つの表にまとめのが良い。(問い: 何故か?)
一つの表に複数の従属性があるのは良くない。(問い: 何故か?)
ある表の中で従属性の入力がすべてKeyになっていて欲しい。(第三正規形,
Boyce-Codd正規形)
NULL値
値が決まってないフィールドがある時、そのフィールドはNULL値(
ヌル値 Null Value, Nulls)を持つという。NULL値は入力にはなれ
ない。したがってKeyにもなれない。
その表は何を表しているのか
表が表すデータは以下の二つに(だいたい)分けられる。
- 物理的実体(もの、オブジェクト)と対応している (Entity)
- オブジェクトの間の関係を表している (Relation)
これを表すのにE-R図というのを使う。
正規形は重要か?
正規形が重要なわけではない。データベースが使いやすいことが重要なのだ。
しかし、普通は第三正規形にしておくと便利であるということは覚えて
おこう。
正規形にならない例
こういう時には、
- 正規形になるように表を別に作る
- 人為的なKeyを作る (ID)
どんどんIDを作れば、どんどん正規形になる。それでいいのか?
従属性は「決まったもの」なのか?
Prev
Next
Kono's home page