RDBMSと正規化について
■RDBMSの構造
 RDBMのデータモデルは、表という概念にもとづいている。
                【学生データ】
    
学生番号
氏名
所属
性別
001
山田 太郎
1組
男
002
佐藤 花子
3組
女
003
山崎 一郎
2組
男
 上の表は、エクセルの表とほとんど同じで、エクセルのシートが複数集まったものがデータベースと考えるとわかりやすいかもしれません。 この表と表との関係をリレーションシップと呼んでいる。
●表(テーブル)
表は、テーブルと呼ばれ、「学生データ」がテーブル名になります。
●列(カラム)
ブルーの縦の列は、カラムと呼ばれ、「氏名」のようにカラム名をつけて他の列と区別できるようにしている。 各カラムは、数値・文字・日付などデータの属性(アトリビュート)が定義されており、カラムに複数のデータを入れ ることや違う種類のデータを入れることはできません。このように定義されたカラムを、これ以上分割できないデータの単位の 集合体いうことで、定義域とも言われている。
●行(ロー) ピンクの横の行は、組(ロー)とも呼ばれている。行の重複はゆるされません。

●キーについて 表の中で、行を特定するための手がかりとなる列をキーと言います。列の中で、キーとなりうる列のことを候補キーといいます。 学生番号や氏名は、本人を特定できるので、候補キーと言えます。しかし、同姓同名の人がいる場合もあり、氏名の列のキーで、一意に 行を特定できないことも考えられます。しかし、学生番号は、重複してつけられることはなく、学生番号により一意に行を特定することが できます。このように重複した値を持たず、一意であるキーを主キーと呼んでいる。



■SQL言語(Structured Query Language・構造化問い合わせ言語)について
 このテーブルを作成しデータ定義のために使うデータベース言語が、SQL言語である。テーブルを作成する場合には、 データ型の種類・アクセス権等のデータの定義をする必要があり、これをデータベースのスキーマと呼んでいる。SQL言語は、 このようなデータベースの定義だけではなく、データベースの操作(データの登録・更新・削除・検索)やトランザクション処理 (複数のアクセスがあった場合に対する処理)に使用する。現在は、オブジェクト指向を取り入れたSQL99が標準で、ISOでも認定されています。 現在のRDBMSは、基本的にSQL99に準拠していますが、多少、RDBMSによって方言があります。標準化されたSQLを 使っているRADBMSであれば、別のRDBMSに変えても、基本的にSQL言語を書き換える必要がありません。

SQL言語の種類
データ定義言語(DDL)
テーブルの作成や削除など create , drop
データ操作言語(DML)
データの検索や結合
データの追加・更新・削除
集約関数
select , order by
insert , update ,delete
sum , avg , max , min , group by
データ制御言語(DCL)
トランザクション処理・権限の付与 grant , commit ,rollback

■正規化について
データベースを設計する場合に、情報を効率よくデータベースで管理するためにモデル化することを正規かと言います。 具体的には、一つの項目に複数のデータが入っているというようなことを排除したり、表を分割することにより 最小限のアクセスで、データの検索や更新ができるようにすることも正規化と言います。正規化の段階により、 第一正規化から第五正規化までありますが、ここでは、第三正規化まで紹介します。

【非正規化表】
学生番号 組
氏名
科目コード
科目名
担当
教科コード
教科名
点数
001
1組
佐藤 太郎
101
201
現代文
化学
山崎
佐々木
1
2
国語
理科
80
96
002
2組
山田 花子
102
202
古典
物理
田上
河合
1
2
国語
理科
50
48
003
2組
伊藤 一郎
101
202
現代文
物理
山崎
河合
1
2
国語
理科
83
90

●第一正規化
非正規化の表では、「選択科目」や「点数」に複数のデータが入っています。たとえば、日付属性の列であれば 複数の日付データを入れると、日付データとして認識されません。さらに検索する場合に、複数のデータがあると 正しい検索することもできません。このような非正規化表から、一事実・一カ所に修正することを第一正規 化といいます。
【第一正規化した表】
学生番号 組
氏名
科目コード
選択科目
担当
教科コード
教科名
点数
001
1組
佐藤 太郎
101
現代文
山崎
1
国語
80
001
1組
佐藤 太郎
201
化学
佐々木
2
理科
96
002
2組
山田 花子
102
古典
田上
1
国語
50
002
2組
山田 花子
202
物理
河合
2
理科
48
003
2組
伊藤 一郎
101
現代文
山崎
1
国語
83
003
2組
伊藤 一郎
202
物理
河合
2
理科
90

 

●第二正規化
第一正規化された表で、現代文の担当者が変わった時にデータ修正をする場合、2カ所訂正が必要です。 しかし、実際データでは、修正個所が数万件にもなる場合もあります。その時に、修正ミスや修正にかかる時間を 考えると非常に効率が悪い。そこで、表を分割することでこれを解消することができます。ある値(キー)が 決まれば、他の値も自動的に決まる場合を従属関係にあるという。ある値が決まることで、すべての 値が決まる場合を完全従属いいます。この表の場合、「学生番号」が決まれば、「組」「氏名」が決まり、 「科目コード」が決まれば、「選択科目」「担当」「教科コード」「教科名」が決まります。このようにこの表には、 2つの完全従属関係があります。「学生番号」「科目コード」を主キーとして2つの従属関係を、2つの表に分けることを 第二正規化といいます。これにより、データの修正が簡単になります。また、3つの表を結合することで、もとの 第一正規化した表を作成することができます。
【成績表】
学生番号 科目コード
点数
001
101
80
001
201
96
002 102 50
002
202
48
003
101
83
003
201
90
【学生表】
学生番号
組
氏名
001
1組
佐藤 太郎
002
2組
山田 花子
003
2組
伊藤 一郎
【科目表】
科目コード 選択科目
担当
教科コード
教科名
101 現代文
山崎
1
国語
102 古典
田上
1
国語
201 化学
佐々木
2
理科
202 物理
河合
2
理科

●第三正規化
第二正規化された科目表で、「科目コード」から「教科コード」「教科名」が推移的に決まるものの、他の科目でも 同じ教科に属する場合があり、違う科目でも同じ教科名が入ることがあるので一意にはならない。このような関係を、 推移従属性と呼んでいる。このような推移従属性を排除して、表を分割することを第三正規化といいます。
【成績表】
学生番号 科目コード
点数
001
101
80
001
201
96
002 102 50
002
202
48
003
101
83
003
201
90
【学生表】
学生番号
組
氏名
001
1組
佐藤 太郎
002
2組
山田 花子
003
2組
伊藤 一郎
【科目表】
科目コード 選択科目
担当
教科コード
101 現代文
山崎
1
102 古典
田上
1
201 化学
佐々木
2
202 物理
河合
2
【教科表】
教科コード
教科名
1
国語
2
理科
HOMEへ データベーストップへ <<<DBMSの役割と構造 SQLの演習>>>