第1章 リレーショナルデータベースの仕組みと基本操作

1. リレーショナルデータベースとは

 リレーショナルデータベース(以下、RDB)では、格納されたデータを全てリレーション(関係)として表現する。実際はリレーションという表現はあまり使われず、表(テーブル)と呼ぶ。

《顧客表》

顧客番号顧客名顧客電話番号担当者
1清水商事052-xxx-xxx佐々木
2渡辺スポーツ052-xxx-xxx加藤
3山田文具店052-xxx-xxx杉村
4Lady's Shop 朝倉052-xxx-xxx杉村
5荒井建設058-xxx-xxx杉村
6安藤工務店058-xxx-xxx間野

 表には1つ以上の(縦方向の)列(カラム)がある。顧客名は1つの列である。当たり前だが、顧客名の列には顧客の名前を格納し、顧客電話番号の列には顧客の電話番号を格納する。顧客名の列に製品名を入れたり、住所を入れたりはしない。(データの内容を保障する)
 表には、ゼロ個以上の(横方向の)行(タプルまたはロー)がある。そして、1つの行は各列についてを持っている。例えば「清水商事」という顧客に関するデータが1つの行で、顧客番号の列の値は「1」、顧客名の列の値は「清水商事」、電話番号の列の値は「052-xxx-xxx」、担当者の列の値は「佐々木」である。
 RDBでは、データを全てこのような表の形で表現する。元のデータが表の形式であるだけでなく、様々な操作を行った結果についても、表の形で表現されるのが大きな特徴である。

2. RDBの操作(選択、射影、結合)

RDBに対する基本的な操作として、「選択」「射影」「結合」という3つの操作がある。

(1) 選択

選択は、表から一部分の行を(横方向に)取り出す操作である。取り出した結果も表形式になる。

《選択を行った表(結果)》

顧客番号顧客名顧客電話番号担当者
3山田文具店052-xxx-xxx杉村
4Lady's Shop 朝倉052-xxx-xxx杉村
5荒井建設058-xxx-xxx杉村

(2) 射影

射影は、表から一部分の列を(縦方向に)取り出す操作である。取り出した結果も表形式になる。

《射影を行った表(結果)》

顧客名担当者
清水商事佐々木
渡辺スポーツ加藤
山田文具店杉村
Lady's Shop 朝倉杉村
荒井建設杉村
安藤工務店間野

(3) 結合

結合は、2つ以上の表から関連のあるものをつないで新しい表を作り出す操作である。例えば顧客からの受注データを格納する「注文表」を、次のように想定する。

《注文表》

注文番号顧客番号注文日製品名単価数量金額
10123/15TV45178,6505393,250
10223/15TV55197,2302291,690
10333/16クリーンHS3311,550334,650
10453/17明灯S403504014,000
10513/17チルド335143,4001143,400

 顧客についての情報(データ)は顧客表に格納されているので、注文表には顧客を表す「顧客番号」だけを格納することにする。この時、注文表の顧客番号を外部キー(FOREIGN KEY)と呼び、顧客表の顧客番号を主キー(PRIMARY KEY)と呼ぶ。外部キーには必ず対応する主キーが存在する(注文には必ず顧客の情報が必要ということ)。このような条件のことを参照制約と呼び、これらが必ず守られるようにRDBを構成することもできる。
 顧客に関する情報が必要な場合は、注文表の外部キーと顧客表の主キーの値が同じ行同士を並べた新しい表を作成する。この操作を結合と呼ぶ。

《顧客表と注文表を結合した表》

顧客番号顧客名顧客電話番号担当者注文番号注文日製品単価数量金額
2渡辺スポーツ052-xxx-xxx加藤1013/15TV45178,6505393,250
2渡辺スポーツ052-xxx-xxx加藤1023/15TV55197,2302291,690
3山田文具店052-xxx-xxx杉村1033/16クリーンHS3311,550334,650
5荒井建設058-xxx-xxx杉村1043/17明灯S403504014,000
1清水商事052-xxx-xxx佐々木1053/17チルド335143,4001143,400

 結合によって、注文と顧客の情報を同時に得ることができる。RDBでは、個々の表は必要最小限の情報のみを保持するように設計する。関連する情報は外部キーによって参照し、結合によって情報を取り出す。RDBでは結合が多用されるため、結合の性能が非常に重要になる。

3.正規形

 必要最小限になった表を正規形と呼び、その状態にすることを正規化と呼ぶ。例として、顧客表に顧客担当者の電話番号を追加することを想定する。

《担当者電話番号を追加した顧客表》

顧客番号顧客名顧客電話番号担当者担当者電話番号
1清水商事052-xxx-xxx佐々木1432-1098
2渡辺スポーツ052-xxx-xxx加藤1432-1095
3山田文具店052-xxx-xxx杉村1432-1234
4Lady's Shop 朝倉052-xxx-xxx杉村1432-1234
5荒井建設058-xxx-xxx杉村1432-1234
6安藤工務店058-xxx-xxx間野1432-1056

 この表では、杉村氏の電話番号が重複して出現する。仮に杉村氏の電話番号が変更になった場合、3箇所とも正しく更新しなければならない。この表は必要最小限な状態ではないので、正規形とはいえない。正規形にした表は次のとおりである。

《正規形にした顧客表》

顧客番号顧客名顧客電話番号担当番号
1清水商事052-xxx-xxx501
2渡辺スポーツ052-xxx-xxx502
3山田文具店052-xxx-xxx503
4Lady's Shop 朝倉052-xxx-xxx503
5荒井建設058-xxx-xxx503
6安藤工務店058-xxx-xxx504

《担当者表》

担当番号担当者名担当者電話番号
501佐々木1432-1098
502加藤1432-1095
503杉村1432-1234
504間野1432-1056

 表が正規化されていれば、データの更新が容易になり、間違いも少なくなる。ただし、人間にとって理解しやすい表現であるとはいえない。エンドユーザや業務アプリケーションが使いやすいように、必要な結合や選択、射影を行った表をビューと呼ばれる形で保存しておくことができる(ビューの表が実際に物理的に存在していることは少なく、通常はビューが使用されるたびに、RDBシステム内部で仮想的な表が作られる)。
 また、結合にはかなりの処理時間がかかる。このため実際のRDB設計では、表を正規化したあとで、性能を上げるために特定の表だけわざと正規形でない形にすることができる。

4.RDBの特徴

RDBの特徴について簡単に説明する。

1.シンプルな構造で理解しやすい
RDBの構造は表形式で、非常に簡単で理解しやすいものである。これがRDBの最大の特徴である(ただし、RDBMSが実際にディスク上で管理しているデータは、もっと複雑である)。
2.SQL
RDBがここまで普及した理由のもう1つが、標準化されたデータベースアクセス言語であるSQLの存在である。SQLにより、どのRDBMS製品であっても同じようにデータベースにアクセスできるようになった。
3.理論による裏づけ
1970年にE.F.Codd氏がリレーショナルモデルについての論文を発表し、その後、多くの人が関連する論文を発表して理論が完成した。りろんの裏づけがあるため、例えば最適化や並列処理を行った場合でも、結果が正しくなることを確認できる。
4.物理構造/論理構造からの独立とスキーマ
データベースの大きな目標は、アプリケーションがデータの物理構造/論理構造から独立することと、データベースの自己記述能力(データベース自身についての説明をデータベース自身が行うこと)を持つことである。SQLでは、物理構造を意識したデータアクセスを行うことはできないため、それらから独立したアプリケーションとなる。また、RDBMSではデータベースの論理構造はスキーマと呼ばれる情報としてデータベース自身に格納されている。そしてスキーマへは、SQLを使ってアクセスできる。(ただし、RDBMSごとにスキーマの構造は異なっている)

[ TOP ]