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
現代文
化学
山崎
佐々木

国語
理科
80
96
002
2組
山田 花子
102
202
古典
物理
田上
河合

国語
理科
50
48
003
2組
伊藤 一郎
101
202
現代文
物理
山崎
河合

国語
理科
83
90

●第一正規化
非正規化の表では、「選択科目」や「点数」に複数のデータが入っています。たとえば、日付属性の列であれば 複数の日付データを入れると、日付データとして認識されません。さらに検索する場合に、複数のデータがあると 正しい検索することもできません。このような非正規化表から、一事実・一カ所に修正することを第一正規 化といいます。
【第一正規化した表】
学生番号
氏名
科目コード
選択科目
担当
教科コード
教科名
点数
001
1組
佐藤 太郎
101
現代文
山崎

国語
80
001
1組
佐藤 太郎
201
化学
佐々木

理科
96
002
2組
山田 花子
102
古典
田上

国語
50
002
2組
山田 花子
202
物理
河合

理科
48
003
2組
伊藤 一郎
101
現代文
山崎

国語
83
003
2組
伊藤 一郎
202
物理
河合

理科
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 現代文
山崎

国語
102 古典
田上

国語
201 化学
佐々木

理科
202 物理
河合

理科

●第三正規化
第二正規化された科目表で、「科目コード」から「教科コード」「教科名」が推移的に決まるものの、他の科目でも 同じ教科に属する場合があり、違う科目でも同じ教科名が入ることがあるので一意にはならない。このような関係を、 推移従属性と呼んでいる。このような推移従属性を排除して、表を分割することを第三正規化といいます。
【成績表】
学生番号 科目コード
点数
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 現代文
山崎

102 古典
田上

201 化学
佐々木

202 物理
河合

【教科表】
教科コード
教科名

国語

理科
HOMEへ データベーストップへ <<<DBMSの役割と構造 SQLの演習>>>