0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

リレーショナルデータベース入門/リレーション・候補キー・主キーの定義

Posted at

初めに

この記事は「リレーショナルデータベース入門 第3版」の第2章の一部をまとめたものです。
リレーションの例などは徹底攻略 データベーススペシャリスト教科書 令和4年度で用いられている具体例を参考にしています。

ドメインとリレーション

ドメインとは集合(=異なる元の集まり)である。
例えば人名の集合、年齢の集合、整数の集合といったものもドメインである。
ドメインは一般にDで表すことにする。例えば以下のようなものがドメインである。

D_{1} = \{x | xは人名\}, D_{2} = \{1,2,3,4,5\}, 

n個のドメインD1,...,Dnの直積は次のようなものである

D_{1}×\ldots ×D_{n} = \{(x_{1} \ldots x_{n}) | x_i \in D_{i} (i=1...n)\}

つまり各ドメインの全ての組み合わせを直積と言う
この直積集合の各要素をタプルという。

定義(リレーション)

D_{1}\ldots D_{n}をドメインとする。\\
D_{1}\ldots D_{n}の上のリレーションRとは、\\
直積D_{1}×\ldots ×D_{n}の任意の部分集合のことを言う

ここでRのタプルの総数のことを濃度と言う。また、Rを構成するドメインの数のことを次数という。次数rのリレーションのことをr項リレーションという。
リレーションは表として表現することができる。例えばD1={a,b,c},D2={10,20}としてR={(a,10),(b,20),(c,10)}とすれば、以下のように表現できる。

a 10
b 20
c 10

表の横の並びを、縦の並びをという。
この表のままでは、初めて参照した人が何の表なのか理解することができない。
そこで列の名前である属性名と表の名前であるリレーション名を与えると、以下のようにわかりやすくなる

兄弟

名前 年齢
a 10
b 20
c 10

属性名を用いて新たにリレーションを定義する。
ドメインD1...Dnの上のリレーションRの属性名をA1...Anとし、
ドメイン関数dom: {A1,..,An} → {D1,..,Dn}をdom(Ai)=Diと定義すると、
リレーションRはdom(A1)×...×dom(An)の任意の部分集合であると定義できる。

リレーションには新しいタプルが挿入・更新されたり削除されたりする。
つまり、タプルの値は変化していくものである。一方で属性やリレーション名は不変のものである。
そこで時間的に不変なリレーションの枠組みのことをリレーションスキーマとして規定する。リレーション名R、属性名A1...Anを用いてリレーションスキーマのことをR (A1...An)で表す。この時、dom(A1)×...×dom(An)の部分集合のことをリレーションスキーマRのインスタンス、単にリレーションといったりする。(リレーションスキーマは時間tに対して変化するリレーションRtの集合みたいなイメージ)

候補キーと主キー

リレーションRに対し、Ωで全属性集合{A1....An}を表す。
また、t={a1...an}をリレーションRのタプルとするとき、aiを「tのAi値」といい、t[Ai] とかく。
より一般に、複数の属性X = {Ai_1....Ai_k}の場合は{ai_1...ai_k}を「tのX値」といい、t[X]とかく。

この書き方を理解するために以下の具体例であるリレーションRを用いる。

具体例:リレーション R「伝票」

伝票番号 顧客名   顧客番号 商品番号 商品名    数量
1001 ねこ商事 11 2001 チョコ 5
1001 ねこ商事 11 2002 キャラメル 10
1002 うさぎ開発 13 2001 チョコ 7
1002 うさぎ開発 13 2003 ドーナツ 20
1002 うさぎ開発 13 2004 アメ   8
1003 くま工業 29 2005 ちんすこう 30
1004 くま工業 29 2005 ちんすこう 100

この場合、
A1,A2,A3,A4,A5,A6はそれぞれ伝票番号,顧客名,顧客番号,商品番号,商品名,数量であり、
全属性集合Ωは{伝票番号,顧客名,顧客番号,商品番号,商品名,数量}である。
タプルtを{1002,うさぎ開発,13,2001,チョコ,7}とすると、t[A2]=うさぎ開発である。
また、X={商品番号,商品名,数量}という全属性集合Ωの部分集合とすると、t[X]={2001,チョコ,7}である。

さてこの表記をもとに、各種キーの定義をする。

定義(候補キー)

リレーションスキーマ\textit Rの属性集合Kが候補キーであるとは、 \\
\textit Rの任意のインスタンスRに対して、以下が成り立つことである\\
1.\quad \forall t,s \in R \quad t[K]=s[K] \Rightarrow t=s \\
2.\quad Kの全ての真部分集合Hに対して1.が成立しない。

つまり、候補キーに当たる属性の値が一致すれば、行の値全てが一致する(一意に決まる)ということである。さらにその属性の組み合わせが極小になっている(それ以上分解しても行を一意に決定するキーになり得ないと言うこと)。
なお、1の条件のみを満たす属性集合KはRのスーパキーという。

先の具体例で言うと、候補キーKは{伝票番号,商品番号}、{伝票番号, 商品名}が該当する。
実際、任意のタプルt,sに対して、それらの値t[K],s[K]が一致すれば、タプルt,sは必ず同じ行にしかなり得ない(例えばK={伝票番号,商品番号}とした時、Kの値を(1001,2002)にしても(1004,2005)にしても何にしても、行が必ず一意に定まる)。

さて、主キーを候補キーから一つ選ぶ(意味的に最も大事なものを選ぶ)。主キーは次のキー制約を満たす必要がある(逆に言えば、主キーは次のキー制約を満たす候補キーである必要があると言える)

定義(キー制約)

キー制約とは、リレーションスキーマ\textit Rの属性集合Kを候補キーとしたときに \\
\textit Rの任意のインスタンスRに対して、以下が成り立つことである\\
1.\quad \forall t,s \in R \quad t[K]=s[K] \Rightarrow t=s \\
2.\quad \forall t\in R  \forall A\in K \quad t[A]は-でない

すなわち、一意識別能力を持ち、かつNULLにならない条件のことをキー制約という。
(候補キーである時点で1.は満たしてるので、わざわざ書く必要がないと思うが、一応書いた。)

これらを定義を用いて、リレーショナル代数や正規化についてまとめていく。

参考

リレーショナルデータベース入門 第3版
徹底攻略 データベーススペシャリスト教科書 令和4年度

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?