意味記述#
子曰:「參乎!吾道一以貫之。」曾子曰:「唯。」子出。門人問曰:「何謂也?」曾子曰:「夫子之道,忠恕而已矣。」
—論語·里仁第四
学習目標#
意味記述とは何かを理解する.
主キー,候補キー,外部キーの違いを理解する.簡単なデータベースにおいて,それらを特定することができる.
検査制約,表明,トリガの概念を理解する.
リレーショナルデータベーススキーマの構成要素を理解する.
候補キーと主キー#
候補キー#
リレーションの全属性集合の部分集合がそのリレーションのタプルの一意識別能力を持つ.このような性質を持つ極小組を候補キー(candidate key)という.
Definition
リレーションスキーマ\(\boldsymbol{R}(A_1, A_2, \ldots, A_n)\)に対して,属性集合\(K \subseteq \{A_1, A_2, \ldots, A_n\}\)が候補キーであるとは,次の2つの条件を満たすことである.
\(K\)が一意識別性を持つ.
\(K\)のどのような真部分集合\(H \subset K\)も一意識別性を持たない.
主キー#
主キー(primary key)はタプルを一意識別するために使用される.候補キーが複数存在する場合,その中から一つを選び,主キーとする.どの候補キーを選ぶかはデータベース設計者の裁量による.
Definition
主キーは次の条件を満たさなければならない.
主キーはタプルを一意識別能力を持つこと.
主キーを構成する属性は空(
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}}\)が主キーであるとき,
と表記する.
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\)が存在し,次が成り立つときである.
Example
A社のデータベースにおいて,社員と部署のリレーションがある.
社員の所属が部門の外部キーである.
部門の部門長が社員の外部キーである.
社員(社員番号,社員名,所属)
社員番号 |
社員名 |
所属 |
---|---|---|
9375 |
田中太郎 |
1 |
9376 |
山田花子 |
2 |
… |
… |
… |
部門(部門番号,部門名,部門長)
部門番号 |
部門名 |
部門長 |
---|---|---|
1 |
データベース部 |
9375 |
2 |
システム部 |
9376 |
… |
… |
… |
検査制約#
検査制約(check constraint)はリレーションの属性値が特定の条件を満たすことを保証する制約.
Example
ある大学のデータベースにおいて,学生のリレーションがある.
学生(学生番号,学生名,年齢,性別)
検査制約の例として,次の制約を考える.
年齢は10歳以上でなければならない.
性別は”男性”,”女性”,”その他”のいずれかでなければならない.
表明#
表明(assertion)は複数のリレーションにまたがる制約を表現するための制約.
Example
ある会社のデータベースにおいて,社員と部門のリレーションがある.
社員(社員番号,社員名,所属,給与)
部門(部門番号,部門名,部門長,予算)
表明の例として,次の制約を考える.
社員の給与は部門の予算を超えてはならない.
トリガ#
トリガ(trigger)はあるリレーションが変更されたときに,他のリレーションにも自動的に更新を行うための制約.
Example
ある大学のデータベースにおいて,学生と学部のリレーションがある.
学生(学生番号,学生名,所属)
学部(学部番号,学部名,学部長,学生数)
トリガの例として,次の制約を考える.
1名の新入生の挿入により,学部の学生数を自動的に1増やす.
リレーショナルデータベーススキーマ#
リレーショナルデータベーススキーマ(relational database schema)はデータベースを定める時間的に不変な構造的・意味的記述体系.リレーショナルデータベースのスキーマは次に示すような要素から成り立つ.
構造記述:データベーススキーマ名,ドメイン定義,リレーションスキーマ定義
意味記述:主キー,外部キー,検査制約,表明定義,トリガ定義,権限定義