なぜデータベースが必要なのか
ファイルシステムでは、部署ごとに自分のファイルを持ちます。すると次のような困りごとが起こります。
- データの冗長性:同じデータが何度も保存され、容量をむだにします。
- データの不整合:1つのコピーだけ更新して他は古いままだと、内容が食い違います。
- 検索や共有がたいへん:質問が変わるたびに新しいプログラムが必要です。
- 守りが弱い:誰に何を見せるかを管理しにくいです。
- データの分散と依存:ファイルの形式がばらばらで、ファイルの形を変えるとプログラムが動かなくなります。
データベースは、関連するデータを1か所にまとめて整理したものです。だから共有でき、内容をそろえられ、守ることもできます。
データベース管理システム(DBMS)
DBMSは、データベースを作り、保存し、更新し、検索し、管理するためのソフトで、誰が使えるかも決めます。例:MySQL、Oracle、PostgreSQL、SQLite、Microsoft Access。
よいところ:重複が少ない、内容がそろう、大勢で共有できる、パスワードや権限で守れる、バックアップと復元ができる、問い合わせ言語(SQL)で簡単に検索できる。
身近な使い道:銀行、鉄道の予約、学校の記録、ネットショッピング、病院。
リレーショナルモデル:リレーション・属性・タプル・ドメイン
リレーショナルデータモデルでは、データを表に入れます。
- リレーション:名前のついた表。例:STUDENT。
- 属性:列。例:Name。
- タプル:行、つまり1件分の記録。
- ドメイン:その属性に入れてよい値の集まり。例:Class ∈ {9, 10, 11, 12}。
- 次数(Degree):属性(列)の数。
- 基数(Cardinality):タプル(行)の数。
決まり:列の名前はすべて異なる。行や列の順番は関係ない。まったく同じ行は2つない。1つのセルには1つの値だけ(または NULL。NULL は「不明」の意味)。
キー:候補キー・主キー・代替キー
- 候補キー:どの行でも値が一意で、NULL にならない属性(または属性の組)。1つの表に複数あってもよい。
- 主キー:行を区別するために選ばれた、1つの候補キー。NULL にならず、重複もしない。
- 代替キー:主キーに選ばれなかった候補キーすべて。
例:STUDENT(AdmNo, Name, Class, Email)。Name は重複し、Class も重複するので、キーではありません。AdmNo と、(いつも入力され、すべて異なるなら)Email が候補キーです。AdmNo を主キーに選ぶと、Email は代替キーになります。
ほかにも役立つ言葉:複合キーは2つ以上の列を組み合わせたキー(たとえば Class + RollNo)。外部キーは、ある表の列が別の表の主キーを指しているもので、2つの表をつなぎます。
やってみよう:IDカードでキーを探す
学校のIDカードや通学定期を見てください。項目(名前、クラス、出席番号、学籍番号、電話番号)をすべて書き出します。それぞれについて2つ質問します。「2人の生徒が同じ値になることはある?」「空欄になることはある?」。どれが候補キーかを書き、主キーに選ぶものを決めましょう。そのあと、3Dのステップ6で同じ考え方を試してください。
重要な公式と用語
- リレーション=表;属性=列;タプル=行
- 次数=列の数;基数=行の数
- 候補キー:一意+NULLでない
- 主キー=選ばれた候補キー;代替キー=残りの候補キー
例題
1. ある表は5列、30行です。次数と基数を答えなさい。
次数 = 5、基数 = 30。
2. 4 × 10(次数4、基数10)の表に2行と1列を追加すると、新しい値はいくつ?
次数 = 5、基数 = 12。
3. EMPLOYEE(EmpID, Name, Aadhaar, Dept)。候補キー、主キー、代替キーを見つけなさい。
EmpID と Aadhaar は一意なので候補キー。EmpID を主キーに選ぶと、Aadhaar は代替キー。Name と Dept は重複することがある。
4. STUDENT で Name を主キーにできないのはなぜ?
同じ名前の生徒が2人いることがあり、1つの行を一意に特定できないから。
5. 1文字で保存する属性 Gender のドメインを答えなさい。
{"M", "F", "O"}(または学校が認めているコード)。
よくある間違い
- 列のことをタプルと呼ぶ。タプル=行、属性=列。
- 次数を行の数だと思う。次数は列の数を数える。
- 候補キーは1つしかないと思う。いくつあってもよいが、主キーは1つだけ。
- 主キーの列に NULL を許してしまう。