データベースの設計
データベースの設計方法として、正規形の説明を行う。 テスト範囲としては、前週のSQLまでとし、テストはA4用紙1枚の資料持込可とする。
適切でないデータベースを例にしながら、更新不整合が発生することを説明する。 (不整合には、修正不整合・挿入不整合・削除不整合がある。) この不整合が発生しないデータベース(表)を作るためには、どうすべきかを解説。
ERモデル
不整合が起こらないようなデータベースとするには、実体と関連にモデル化を行う。 実体・関連には、属性(attribute)が付随し、実体を長方形、関連をひし形、属性を楕円で表現する ER図を描く。
学生や教員といった実体は、人という汎化した視点であれば、識別番号と名前の属性で 表現できると意味で、共通である。人を学生という視点で特化した先に、学科名や学年といった 属性を持つと考えられる。こういった汎化階層は、オブジェクト指向と同じ。
実体の中には、他の実体と関連を持って初めて意味を持つ実体もある。 関連先の実体が消えれば、存在自体が無意味になってしまう実体は、弱実体と呼ぶ。
正規形
不整合が起こらないデータベースを構築するためには、様々な条件が存在する。 その条件を満たすデータ形式になっていることを、××正規形と呼ぶ。
第一正規形は、全属性が単一の値である原子値であるもの。
データを1つに絞り込めるデータ項目は超キーと呼ぶ。 必要最小限に厳選された超キーは、候補キーと呼ぶ。 候補キーで、管理上都合のいいものは主キーと呼ぶ。 属性の1つが決まると、他の属性も1つに自動的に絞り込まれる場合、 従属関係があるという。 候補キーに、非キー項目が従属する場合、完全従属と呼ぶ。 候補キーの一部が、非キー項目が従属するものは部分従属と呼ぶ。 部分従属がなく、非キー項目が候補キーに完全従属する場合、第二正規形と呼ぶ。
非キーデータ項目A,Bの間に従属性があり、候補キーからAに従属性がある場合、 推移従属性があるという。 非キー・データ項目が、候補キーに完全従属し かつ 推移従属性がない場合、 第三正規形と呼ぶ。
不整合の発生しないデータベースにしたければ、第一正規形となるように、第二、第三と それぞれの正規形の条件を満たすように、ER図を書き換えていく。
B木の説明
2分木の応用ということで、式の表現などの説明を行ったが、 3項演算子などがでてくると、2本の木という枠からはずれてくる。 この延長として、B木の解説を行う。
B木の基本は、N-1個のデータd[]と、N個のポインタp[]から成り、 di-1と、diの間の値は、i番目の枝piの先に保存する方法。(以下の図はWikipediaより引用)
// BTreeの宣言の例 #define SIZE 5 struct BTree { int size ; // 1つのノード内のデータ数 int data[ SIZE - 1 ] ; // ノード内のデータ struct BTree* next[ SIZE ] ; // 次のBTreeへのポインタ } ;
実際のプログラムの概念を説明し、実コードは示さなかったが、 ノード内の検索などを説明する。
B木は、広く利用されており、データベースエンジンでは、B木を拡張した、 B+木 などを利用している。
データベースの説明の延長として、最近普及しているOracle,MySQL,PostgreSQLなどの 事例を紹介したり、Linux+Apache+MySQL+PHP(LAMP)などの用語を簡単に紹介する。