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.7 ある大学の学生管理システムのリレーショナルデータベーススキーマは次のように定義される.

  • データベーススキーマ名:学生管理システム
  • ドメイン定義:
    • 学生番号:文字列
    • 学生名:文字列
    • 年齢:整数
    • 性別:文字列
    • 学部番号:文字列
    • 学部名:文字列
    • 学部長:文字列
    • 学生数:整数
  • リレーションスキーマ定義(主キーは下線で示す):
    • 学生(学生番号,学生名,年齢,性別,所属学部番号)
    • 学部(学部番号,学部名,学部長,学生数)
    • 成績(学生番号科目,成績)
    • 科目(科目番号,科目名,担当教員)
  • 外部キー:
    • 学生の所属学部番号は学部の学部番号の外部キーである.
    • 成績の学生番号は学生の学生番号の外部キーである.
    • 成績の科目は科目の科目番号の外部キーである.
  • 検査制約:
    • 学生の年齢は10歳以上でなければならない.
    • 学生の性別は”男性”,“女性”,“その他”のいずれかでなければならない.
  • 表明:
    • 学生数は決まられた学部の学生数を超えてはならない.
  • トリガ:
    • 1名の新入生の挿入により,学部の学生数を自動的に1増やす.

4.8 練習問題

リレーショナルデータベーススキーマを,自由なテーマに基づいてを定義せよ。 テーマは自由(例:学生管理システム,音楽管理システム,図書館システム,病院システム,銀行システムなど)であるが,リレーショナルデータベーススキーマには以下の要素をすべて含めること:

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

pdfファイルを提出すること.