意味記述#

子曰:「參乎!吾道一以貫之。」曾子曰:「唯。」子出。門人問曰:「何謂也?」曾子曰:「夫子之道,忠恕而已矣。」

—論語·里仁第四

学習目標#

  • 意味記述とは何かを理解する.

  • 主キー,候補キー,外部キーの違いを理解する.簡単なデータベースにおいて,それらを特定することができる.

  • 検査制約,表明,トリガの概念を理解する.

  • リレーショナルデータベーススキーマの構成要素を理解する.

候補キーと主キー#

候補キー#

リレーションの全属性集合の部分集合がそのリレーションのタプルの一意識別能力を持つ.このような性質を持つ極小組を候補キー(candidate key)という.

Definition

リレーションスキーマ\(\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\)も一意識別性を持たない.

主キー#

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

Definition

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

  1. 主キーはタプルを一意識別能力を持つこと.

  2. 主キーを構成する属性は空(NULL)をとらないこと.

この制約をキー制約(key constraint)という.

Note

空 主キーを構成しない属性が空(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)\]

と表記する.

Example

A社のデータベースにおいて,社員と部署のリレーションがある.社員の主キーを社員番号とし,部署の主キーを部署番号とするとき,次のように表記する.

  • 社員(社員番号,社員名,部署番号)

  • 部署(部署番号,部署名,所在地)

Example

ある大学のデータベースにおいて,学生と成績のリレーションがある.

  • 学生(学生番号,学生名,個人番号)

  • 成績(学生番号,科目,成績)

学生の候補キーは\(\{\text{学生番号}\}\)\(\{\text{個人番号}\}\)である.個人番号も学生番号も学生を一意識別する能力を持つが,大学のデータベースにおいて学生番号が主キーとして選ばれる.

成績の候補キーと主キーは\(\{\text{学生番号, 科目}\}\)である.

外部キー#

外部キー(foreign key)はリレーション間の関係を表現するための制約.

Definition

\(\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}\]

Example

A社のデータベースにおいて,社員と部署のリレーションがある.

  • 社員の所属が部門の外部キーである.

  • 部門の部門長が社員の外部キーである.

社員社員番号,社員名,所属)

社員番号

社員名

所属

9375

田中太郎

1

9376

山田花子

2

部門部門番号,部門名,部門長)

部門番号

部門名

部門長

1

データベース部

9375

2

システム部

9376

検査制約#

検査制約(check constraint)はリレーションの属性値が特定の条件を満たすことを保証する制約.

Example

ある大学のデータベースにおいて,学生のリレーションがある.

  • 学生学生番号,学生名,年齢,性別)

検査制約の例として,次の制約を考える.

  • 年齢は10歳以上でなければならない.

  • 性別は”男性”,”女性”,”その他”のいずれかでなければならない.

表明#

表明(assertion)は複数のリレーションにまたがる制約を表現するための制約.

Example

ある会社のデータベースにおいて,社員と部門のリレーションがある.

  • 社員社員番号,社員名,所属,給与)

  • 部門部門番号,部門名,部門長,予算)

表明の例として,次の制約を考える.

  • 社員の給与は部門の予算を超えてはならない.

トリガ#

トリガ(trigger)はあるリレーションが変更されたときに,他のリレーションにも自動的に更新を行うための制約.

Example

ある大学のデータベースにおいて,学生と学部のリレーションがある.

  • 学生学生番号,学生名,所属)

  • 学部学部番号,学部名,学部長,学生数)

トリガの例として,次の制約を考える.

  • 1名の新入生の挿入により,学部の学生数を自動的に1増やす.

リレーショナルデータベーススキーマ#

リレーショナルデータベーススキーマ(relational database schema)はデータベースを定める時間的に不変な構造的・意味的記述体系.リレーショナルデータベースのスキーマは次に示すような要素から成り立つ.

  • 構造記述:データベーススキーマ名,ドメイン定義,リレーションスキーマ定義

  • 意味記述:主キー,外部キー,検査制約,表明定義,トリガ定義,権限定義