4 意味記述
子曰:「參乎!吾道一以貫之。」曾子曰:「唯。」子出。門人問曰:「何謂也?」曾子曰:「夫子之道,忠恕而已矣。」
– 論語·里仁第四
4.1 学習目標
- 意味記述とは何かを理解する.
- 主キー,候補キー,外部キーの違いを理解する.簡単なデータベースにおいて,それらを特定することができる.
- 検査制約,表明,トリガの概念を理解する.
- リレーショナルデータベーススキーマの構成要素を理解する.
4.2 候補キーと主キー
4.2.1 候補キー
リレーションの全属性集合の部分集合がそのリレーションのタプルの一意識別能力を持つ.このような性質を持つ極小組を候補キー(candidate key)という.
定義 4.1 リレーションスキーマ \(\boldsymbol{R}(A_1, A_2, \ldots, A_n)\) に対して,属性集合 \(K \subseteq \{A_1, A_2, \ldots, A_n\}\) が候補キーであるとは,次の2つの条件を満たすことである.
- \(K\) が一意識別性を持つ.
- \(K\) のどのような真部分集合 \(H \subset K\) も一意識別性を持たない.
4.2.2 主キー
主キー(primary key)はタプルを一意識別するために使用される.候補キーが複数存在する場合,その中から一つを選び,主キーとする.どの候補キーを選ぶかはデータベース設計者の裁量による.
定義 4.2 主キーは次の条件を満たさなければならない.
- 主キーはタプルを一意識別能力を持つこと.
- 主キーを構成する属性は空(
NULL)をとらないこと.
この制約をキー制約(key constraint)という.
主キーを構成しない属性が空(NULL,ナル)をとることができる.空の意味は次の3種類がある.
- unknown:未知
- nonexistent:存在しない
- no-information:情報なし
一般に,リレーションスキーマ \(\boldsymbol{R}(A_1, A_2, \ldots, A_n)\) の属性集合 \({A_{k1}, A_{k2}, \ldots, A_{km}}\) が主キーであるとき,
\[ \boldsymbol{R}(\dots, \underline{A_{k1}}, \dots, \underline{A_{k2}}, \ldots, \underline{A_{km}}, \dots) \]
と表記する.
例 4.1 A社のデータベースにおいて,社員と部署のリレーションがある.社員の主キーを社員番号とし,部署の主キーを部署番号とするとき,次のように表記する.
- 社員(社員番号,社員名,部署番号)
- 部署(部署番号,部署名,所在地)
社員番号が主キーであるため、下記のキー制約を満たさなければならない. - 社員番号は社員を一意識別する能力を持つ. - 社員番号は空(NULL)をとらない.
例 4.2 ある大学のデータベースにおいて,学生と成績のリレーションがある.
- 学生(学生番号,学生名,個人番号)
- 成績(学生番号,科目,成績)
学生の候補キーは \(\{\text{学生番号}\}\),\(\{\text{個人番号}\}\) である.個人番号も学生番号も学生を一意識別する能力を持つが,大学のデータベースにおいて学生番号が主キーとして選ばれる.
成績の候補キーと主キーは \(\{\text{学生番号, 科目}\}\) である.
4.3 外部キー
外部キー(foreign key)はリレーション間の関係を表現するための制約.
定義 4.3 \(\boldsymbol{R}\) と \(\boldsymbol{S}\) をリレーションスキーマとするとき,\(\boldsymbol{R}\) の属性集合 \(F\) が \(\boldsymbol{S}\) の外部キーであるとは,\(\boldsymbol{S}\) の主キーを\(K\)とするとき,\(\boldsymbol{R}\) の任意のインスタンス\(R\)に対して,\(\boldsymbol{S}\) のインスタンス \(S\) が存在し,次が成り立つときである.
\[ \forall t \in R, \exists u \in S \text{ such that } t[F] = u[K] \text{ or } t[F] = \text{NULL} \]
例 4.3 A社のデータベースにおいて,社員と部署のリレーションがある.
- 社員の所属が部門の外部キーである.
- 部門の部門長が社員の外部キーである.
社員(社員番号,社員名,所属)
| 社員番号 | 社員名 | 所属 |
|---|---|---|
| 9375 | 田中太郎 | 1 |
| 9376 | 山田花子 | 2 |
| … | … | … |
部門(部門番号,部門名,部門長)
| 部門番号 | 部門名 | 部門長 |
|---|---|---|
| 1 | データベース部 | 9375 |
| 2 | システム部 | 9376 |
| … | … | … |
以下の外部キー制約を満たさなければならない.
- 社員の所属には、部門の部門番号に記録されている値か、空(NULL)しかない.
- 部門の部門長には、社員の社員番号に記録されている値か、空(NULL)しかない.
4.4 検査制約
検査制約(check constraint)はリレーションの属性値が特定の条件を満たすことを保証する制約.
例 4.4 ある大学のデータベースにおいて,学生のリレーションがある.
- 学生(学生番号,学生名,年齢,性別)
検査制約の例として,次の制約を考える.
- 年齢は10歳以上でなければならない.
- 性別は”男性”,“女性”,“その他”のいずれかでなければならない.
4.5 表明
表明(assertion)は複数のリレーションにまたがる制約を表現するための制約.
例 4.5 ある会社のデータベースにおいて,社員と部門のリレーションがある.
- 社員(社員番号,社員名,所属,給与)
- 部門(部門番号,部門名,部門長,予算)
表明の例として,次の制約を考える.
- 社員の給与は部門の予算を超えてはならない.
4.6 トリガ
トリガ(trigger)はあるリレーションが変更されたときに,他のリレーションにも自動的に更新を行うための制約.
例 4.6 ある大学のデータベースにおいて,学生と学部のリレーションがある.
- 学生(学生番号,学生名,所属)
- 学部(学部番号,学部名,学部長,学生数)
トリガの例として,次の制約を考える.
- 1名の新入生の挿入により,学部の学生数を自動的に1増やす.
4.7 リレーショナルデータベーススキーマ
リレーショナルデータベーススキーマ(relational database schema)はデータベースを定める時間的に不変な構造的・意味的記述体系.リレーショナルデータベースのスキーマは次に示すような要素から成り立つ.
- 構造記述:データベーススキーマ名,ドメイン定義,リレーションスキーマ定義
- 意味記述:主キー,外部キー,検査制約,表明定義,トリガ定義,権限定義
4.8 練習問題
リレーショナルデータベーススキーマを、自由なテーマに基づいてを定義せよ。 テーマは自由(例:学生管理システム、図書館システム、病院システムなど)。
以下の要素をすべて含めること:
- ドメイン定義
- リレーションスキーマ定義
- 主キー
- 外部キー
- 検査制約
- 表明
- トリガ
ドメイン定義、リレーションスキーマ定義、主キーは数学的に記述すること。
外部キー、検査制約、表明、トリガの定義は自然言語で記述すること。