|
| CNUM | TITLE | TEACHER | URL |
| 53210 | 知識工学 | ファー | /SYL/53210.html |
| 53220 | 信号処理 | 八嶋 | /SYL/53220.html |
| 53260 | CAD 工学 | 近藤 | /SYL/53260.html |
| 53270 | コンパイラ工学 | 岩澤 | /SYL/53270.html |
この表の各行は1つの科目を表し,各列にはその科目についての1種類の情報が入っています.列 cnum に注目してください.これは,科目は同名を持つ可能性があるため(例えば他学科の同名科目),それぞれの科目を区別するために生成された番号です.リレーショナル・データベースでは,保管されている場所ではなくその内容によりデータを参照します.したがってすべての表は,すべての行に対して値の異なる1つ以上の列から成る識別グループ(その値はセットとみなされる)がなければなりません.この識別グループ(上記の表の場合は列 cnum)は,表の“主キー”(Primary Key)と呼ばれます.この例にあるように,ローカルに生成された番号は,主キーを作成するために用いられる一般的で簡単な方法です.
データベースに科目の単位数を追加したいとします,同じ科目が学年度によって複数の単位数をもつこともあるので,上記の表の構造にはうまく適合しません.シラバス表に単位数を挿入したい場合,以下のように3つの可能性がありますが,どれも良い方法とはいえません.
以下のように,もう1つの表 (Credits) を作成します.
| CNUM | CREDIT | YEAR |
| 53210 | 2 | 平成6年度以降 |
| 53210 | 3 | 平成6年度以前 |
| 53260 | 2 | 平成6年度以前 |
| 53270 | 2 | 平成6年度以降 |
| 53260 | 3 | 平成6年度以降 |
この表では,CNUMは主キーではないことに注意してください.これは科目を識別するものなので,1つの科目の異なる単位数に対しては同じ価となります.では,この場合何が主キーでしょうか? それは CNUM とCREDITS の組合わせです.同じ科目に同じ番号を2度リストした場合,入力が重複することになるため1つを排除しなければなりません.
しかし,CNUM 列には特別な機能があります.この列は,各単位数をそれぞれの科目と関連付けることにより Creditsと Syllabusesとの関係を定義しているからです.このことを,Credits の cnum 列が Syllabuses の cnum 列を参照するといいます.このように,他のグループを参照する1つ以上の列から成るグループを“外部キー”(Foreign Key)といいます.外部キーが参照する列のグループは親キー,または参照キーといいます.外部キーのそれぞれの値は,親キーが含まれる表の特定の行を参照します.したがって,明確で意味のある参照をするには,個々の外部キーの値のセットが,親キーに一度だけ含まれなければなりません(ただし上記のように,外部キー自身には同じ値が何回も含まれる可能性があります).このため,親キーは主キーであるか(通常のケース),固有キーと呼ばれる別の固有な列グループでなければなりません.
RDBMS サーバーはすべての主キーと固有キーが固有であり,外部キー参照がすべて有効であることを確認します,このことは参照整合性の維持と呼ばれています.
補助資料:
参考文献:
“Oracle Web Server” Oracle 社 1997