Database Lecture 5/20

# Database Lecture 5/20

前回の復習

カード型データベース
スプレッドシート
データの変換 TSV, CSV, SYLK
バッチ型のデータベース入出力

ニュースグループ

ura.ie.classes.database に講義の資料や、問題の
答を出しているので参考にすること。

## 複数の表

例題のアンケートを毎年取ったとしよう。その二つの表を扱うには
どうすれば良いか?

二つの表のままにしておく
一つの大きな表にまとめる

- 共通な部分を別な表にする
- 名前と学籍番号の対応表を別に持った方が便利だ。(問い:何故か?)

さらに小さな表に分割する
どんどん細かくした方が便利なのか?
複数の答が入っているフィールドをどうする?
分割した時の行き先をどう指し示す? (ポインタ)

(問い: 二つのアンケートのいろいろな表の分割と結合を考えて、
その利点と欠点を考えよう。)

情報が落ちていないか?
余計なフィールド、無駄になっているフィールドがないか?
データの追加/変更/削除は簡単か?

## 自分のコンピュータ

誰がどんなコンピュータを持っているかを表にして見よう。もしかすると、
10台コンピュータを持っている人がいるかも知れない。

関係データベース(Relational Database)では、一つのフィールドは一つの値しか
入らないとする。(第一正規形)

## 表を分割したり、お互いに関連づけたりするには

表はフィールドの関係を表している。しかし、必要なのは質問に対する答が
得られることだ。それは表を

質問 -> 答

という関数としてみることを意味する。通常これは、

質問に関連するフィールド -> 答のフィールド

ということになる。もともとデータベースには、これらに答えることの
できる関数がそなわっているはずである。それらは表の形で関係データ
ベータの中に存在しなくてはならない。

ちゃんとデータベースの中の表が必要な関数を表しているかどうかを
調べるには、次の二つの性質に気を付ける必要がある。

従属性 (Dependency 関数従属性 Functional Dependency)

- あるレコードの中で、フィールドAの値が決まればフィールドBの値が決まる
という性質がある時、A-> Bの従属性がある、または、BはAに従属する
という。 A,Bは複数のフィールドの組であっても良い。Aを従属性の入力、
Bを従属性の出力と呼ぼう。
- Key
- ある表の中でレコードを特定することのできるフィールドをKeyという。
Keyは複数のフィールドの組であっても良い。

## 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の値が未定

こういう時には、

正規形になるように表を別に作る
人為的なKeyを作る (ID)

どんどんIDを作れば、どんどん正規形になる。それでいいのか?
従属性は「決まったもの」なのか?

Prev
Next
Kono's home page