情報工学実験II: RDBMS (平成13年度版)

RDBMS と SQLの概要

 

ここでは,データベースの概要について説明します.ここで扱う内容は概略と簡単なプログラム作成に必要となる情報です.内容は次のとおりです.

  1. リレーショナル・データベース (RDBMS)の概略
  2. SQL RDBMSとのインターフェースに使用する標準言語の紹介

1. リレーショナル・データベース(RDBMS)の概略

リレーショナル・データベース管理システム(RDBMS)サーバーの役割はデータ管理です.他のプロセスやユーザーは,RDBMSが実行する SQL文を発行することにより,データを保管,変更,取得しますが,直接データにアクセスすることはありません.すべての情報を単一のエンティティの下に管理することにより,例えば,統一性のある情報構造を維持したり,複数ユーザーが同期に変更しても相互千渉が発生しないことが保証されます.

リレーショナルデータベース管理システムは,そこで扱われるすべてのデータが表で構成されることを意味します(表は数学専門用語で ”リレーション”といいます).以下は,データベースの表の簡単な例です.

CNUM TITLE TEACHER URL
53210 知識工学 ファー /SYL/53210.html
53220 信号処理 八嶋 /SYL/53220.html
53260 CAD 工学 近藤 /SYL/53260.html
53270 コンパイラ工学 岩澤 /SYL/53270.html
Table 1: Syllabuses

この表の各行は1つの科目を表し,各列にはその科目についての1種類の情報が入っています.列 cnum に注目してください.これは,科目は同名を持つ可能性があるため(例えば他学科の同名科目),それぞれの科目を区別するために生成された番号です.リレーショナル・データベースでは,保管されている場所ではなくその内容によりデータを参照します.したがってすべての表は,すべての行に対して値の異なる1つ以上の列から成る識別グループ(その値はセットとみなされる)がなければなりません.この識別グループ(上記の表の場合は列 cnum)は,表の“主キー”(Primary Key)と呼ばれます.この例にあるように,ローカルに生成された番号は,主キーを作成するために用いられる一般的で簡単な方法です.

データベースに科目の単位数を追加したいとします,同じ科目が学年度によって複数の単位数をもつこともあるので,上記の表の構造にはうまく適合しません.シラバス表に単位数を挿入したい場合,以下のように3つの可能性がありますが,どれも良い方法とはいえません.

  1. ある科目の単位数すべてを同一行の1つの列に入れる.この場合,これらの単位数に個々にアクセスするのが困難になります.
  2. 単位数のタイプごとに列を作成する.この場合,新タイプが現れるたびに表を設計し直さなければなりません.また,ほとんど空の列が多数できる可能性があります.
  3. 各単位数ごとに新しい行を作成する.この場合,各行には新しい単位数以外は重複する情報が入ってしまいます.このアプローチは間違いを起こしやすく,スペースを無駄にします.

以下のように,もう1つの表 (Credits) を作成します.

CNUM CREDIT YEAR
53210 平成6年度以降
53210 平成6年度以前
53260 平成6年度以前
53270 平成6年度以降
53260 平成6年度以降
Table 2: Credits

この表では,CNUMは主キーではないことに注意してください.これは科目を識別するものなので,1つの科目の異なる単位数に対しては同じ価となります.では,この場合何が主キーでしょうか? それは CNUMCREDITS の組合わせです.同じ科目に同じ番号を2度リストした場合,入力が重複することになるため1つを排除しなければなりません.

しかし,CNUM 列には特別な機能があります.この列は,各単位数をそれぞれの科目と関連付けることにより CreditsSyllabusesとの関係を定義しているからです.このことを,Credits cnum 列が Syllabusescnum 列を参照するといいます.このように,他のグループを参照する1つ以上の列から成るグループを“外部キー”(Foreign Key)といいます.外部キーが参照する列のグループは親キー,または参照キーといいます.外部キーのそれぞれの値は,親キーが含まれる表の特定の行を参照します.したがって,明確で意味のある参照をするには,個々の外部キーの値のセットが,親キーに一度だけ含まれなければなりません(ただし上記のように,外部キー自身には同じ値が何回も含まれる可能性があります).このため,親キーは主キーであるか(通常のケース),固有キーと呼ばれる別の固有な列グループでなければなりません.

RDBMS サーバーはすべての主キーと固有キーが固有であり,外部キー参照がすべて有効であることを確認します,このことは参照整合性の維持と呼ばれています.



補助資料:



実験資料PDF形式

参考文献:

“Oracle Web Server” Oracle 社 1997