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つの条件を満たすことである.

  1. \(K\) が一意識別性を持つ.
  2. \(K\) のどのような真部分集合 \(H \subset K\) も一意識別性を持たない.

4.2.2 主キー

主キー(primary key)はタプルを一意識別するために使用される.候補キーが複数存在する場合,その中から一つを選び,主キーとする.どの候補キーを選ぶかはデータベース設計者の裁量による.

定義 4.2 主キーは次の条件を満たさなければならない.

  1. 主キーはタプルを一意識別能力を持つこと.
  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 練習問題

リレーショナルデータベーススキーマを、自由なテーマに基づいてを定義せよ。 テーマは自由(例:学生管理システム、図書館システム、病院システムなど)。

以下の要素をすべて含めること:

  • ドメイン定義
  • リレーションスキーマ定義
  • 主キー
  • 外部キー
  • 検査制約
  • 表明
  • トリガ

ドメイン定義、リレーションスキーマ定義、主キーは数学的に記述すること。

外部キー、検査制約、表明、トリガの定義は自然言語で記述すること。