2005年度前期 IT教育基礎論特論B
IT教育のための知識ベースとしてのデータベースの管理のために、 具体的なデータベースの1つとして 現在広く一般に利用されているリレーショナルデータベースを例にとり、 データベース管理システムの概要、 およびリレーショナルデータベースの基盤となる リレーショナルデータモデル、リレーショナル代数の基礎を学習する。
リレーショナルデータベース(RDB: Relational Database)とは、 リレーショナルデータモデルに基づくデータベースであり、 現在、もっとも広く利用されているデータベースの1つである。
リレーショナルデータベースでは、 各種データをその関係に基づき、表(テーブル)として構造化する。 このテーブルに対し、リレーション代数により定義される演算に基づき、 データの登録、変更、削除、参照やデータ間の関係の抽出などの操作を 行うことができる。
一般に、このリレーショナルデータベースは、 リレーショナルデータベース管理システム (RDBMS: Relational Database Management System)により管理され、 データベースの利用者は、このデータベース管理システムを介し、 問い合わせ言語としてSQL(Structured Query Language)を利用し、 データベースにアクセスする。
リレーショナルデータベースの基礎とするリレーショナルデータモデルの概要を示す。
リレーションとは、データとデータの関係であるが、 リレーショナルデータモデルでは、 これをドメインの直積の部分集合として定義する。
ドメイン(定義域)とは、なんらかのある基準に基づき定義されたデータの集合である。 例えば、「自然数」というドメインは、1,2,3,...をその要素としてもつ集合であり、 またロックやクラシック、R&B等を要素とする 「音楽の種類」というドメインを考えることができる。 なお、このドメインは、有限集合でも無限集合でもかまわない。
ドメインの直積とは、ドメインの各要素の ドメイン間での全組み合わせからなる集合である。 すなわち、ドメインとしてD1={1, 2}, D2={a, b, c}があった場合、 その直積D1×D2は、 以下のように6個の要素からなる集合となる。
D1×D2= {(1, a), (1, b), (1, c), (2, a), (2, b), (2, c)} |
また、D1={リンゴ, ミカン, キウィ}, D2={30, 80, 100}, D3={1, 3, 5}の直積 D1×D2×D3は、 以下のように27個の要素を持つ集合となる。
D1×D2×D3 = { | (リンゴ, 30, 1), (リンゴ, 30, 3), (リンゴ, 30, 5), | |
(リンゴ, 80, 1), (リンゴ, 80, 3), (リンゴ, 80, 5), | ||
(リンゴ, 100, 1), (リンゴ, 100, 3), (リンゴ, 100, 5), | ||
(ミカン, 30, 1), (ミカン, 30, 3), (ミカン, 30, 5), | ||
(ミカン, 80, 1), (ミカン, 80, 3), (ミカン, 80, 5), | ||
(ミカン, 100, 1), (ミカン, 100, 3), (ミカン, 100, 5), | ||
(キウイ, 30, 1), (キウイ, 30, 3), (キウイ, 30, 5), | ||
(キウイ, 80, 1), (キウイ, 80, 3), (キウイ, 80, 5), | ||
(キウイ, 100, 1), (キウイ, 100, 3), (キウイ, 100, 5) | } |
リレーションは、以上の定義に基づくドメインの直積の 任意の有限部分集合により定義される。 例えばD1={1, 2}, D2={a, b, c}において、 R = {(1, a), (1, c), (2, b), (2, c)}は、 D1×D2における 1つのリレーションである。
同様に、D1={リンゴ, ミカン, キウィ}, D2={30, 80, 100}, D3={1, 3, 5}において、 R = { (リンゴ, 80, 1), (ミカン, 30, 5), (キウイ, 100, 3) }は、 D1×D2×D3における 1つのリレーションである。
このリレーションは、表(テーブル)の形式により表現することもできる。 例えば、 R = { (リンゴ, 80, 1), (ミカン, 30, 5), (キウイ, 100, 3) }は、 表1のように表現することができる。
|
先に、D1={リンゴ, ミカン, キウィ}, D2={30, 80, 100}, D3={1, 3, 5}において、 リレーションR = { (リンゴ, 80, 1), (ミカン, 30, 5), (キウイ, 100, 3) } ⊆ D1×D2×D3を 表1に示すようにテーブルにより表現した。 実は、このリレーションは、 ある店で売られている果物の単価とその販売単位を示しているが、 このリレーションを見ただけでは、 リレーションを定義した者以外はその意味がわからない。 そこで、表2のように、リレーションの名前と、各列の名前をつけると わかりやすくなる。
果物 | 単価 | 販売単位 |
---|---|---|
リンゴ | 80 | 1 |
ミカン | 30 | 5 |
キウイ | 100 | 3 |
このリレーションの名前をリレーション名もしくはテーブル名と呼び、 また、各列を属性、属性の名前を属性名もしくはカラム名と呼ぶ。
このとき、あるリレーションの構造は、 どのような属性からなるかにより定義することができる。 これをリレーションスキーマと呼ぶ。 例えば、あるリレーションR は、 属性A1, A1, ... An のからなると定義でき、 これをR ( A1, A1, ... An )と表現する。 また、このリレーションスキーマに基づき、 具体的な要素からなるテーブルをインスタンスと呼ぶ。
リレーションR が、 D1, D2, ..., Dn の 直積D1×D2×...×Dn の 部分集合であり、 そのリレーションスキーマが R ( A1, A1, ... An )であるとすると、 i 番目の属性Ai のとる値は、 Di の要素である。 すなわち、属性Ai のとるべき値のドメインが Di であるといえ、 これをDi = dom(Ai )と書く。
また、リレーションR の1つの要素をタプルt と呼び、 あるタプルt ={ a1, a2, ..., an}における属性Ai の値 ai をt のAi 値と呼び、 ai = t [Ai ] と書く。
リレーショナル代数とは、 リレーショナルデータモデルにより定義されるリレーションに対する 演算方法を定めた集合演算である。 これにより特定の値を参照したり、 また複数のリレーション間の関係から新たなリレーションを求めたりする ことができる。
リレーショナル代数は、一般的な集合演算により定義される 和集合演算、差集合演算、共通集合演算、直積演算の4種類の演算と、 リレーショナル代数に特有な射影演算、選択演算、結合演算、商演算の4種類の演算、 計8種類の演算により定義される。
和両立なリレーションR , S の和集合R ∪S は、 以下のように定義される。
R ∪S = { t | t ∈R ∨ t ∈S } |
ここでいう和両立とは、 リレーションR (A1, A2, ..., Am)および リレーションS (B1, B2, ..., Bn)が存在し、以下が成り立つ場合に、 R とS は和両立であるという。
- m = n
- ∀i (1≦i ≦n) について、 dom(Ai ) = dom(Bi )
例えば、表3および表4に示すリレーション 「商店Aの商品」と「商店Bの商品」は和両立である。
|
|
このとき、「商店Aの商品」と「商店Bの商品」の和集合は、 表5に示すようになる。
|
和両立なリレーションR , S の差集合R -S は、 以下のように定義される。
R -S = { t | t ∈R ∧ ¬(t ∈S )} |
例えば、「商店Aの商品」と「商店Bの商品」の差集合は、 表6に示すようになる。
|
和両立なリレーションR , S の共通集合R ∩S は、 以下のように定義される。
例えば、「商店Aの商品」と「商店Bの商品」の共通集合は、 表7に示すようになる。
|
リレーションR , S の直積R ×S は、 以下のように定義される。
R ×S = { (s , t ) | s ∈R ∧ t ∈S } |
ただし、s = (a 1, a 2, ..., am ), t = (b 1, b 2, ..., bn )とするときに、 (s , t )を以下のように定義する。
(s , t ) = (a 1, a 2, ..., am , b 1, b 2, ...,bn ) |
例えば、表8および表9に示すリレーション「地域」と「特産」の直積は、 表10に示すようになる。
|
|
地域 . 地方 | 地域 . 県 | 特産 . 県 | 特産 . 果物 |
---|---|---|---|
東北 | 青森 | 青森 | リンゴ |
東北 | 青森 | 愛媛 | ミカン |
関東 | 栃木 | 青森 | リンゴ |
関東 | 栃木 | 愛媛 | ミカン |
四国 | 愛媛 | 青森 | リンゴ |
四国 | 愛媛 | 愛媛 | ミカン |
リレーションR における全属性の集合を {A1, A2, ..., An }とし、 その部分集合X を {Ai 1, Ai 2, ..., Ai k }とするとき (ただし、1≦i 1≦i 2≦ ... ≦i k ≦n )、 R のX 上の射影をR [X ]もしくは R [Ai 1, Ai 2, ..., Ai k ]と書き、以下のように定義される。
R [Ai 1, Ai 2, ...,Ai k ] = { u | | u ∈ dom(Ai 1)× dom(Ai 2)×...× dom(Ai k )∧ |
(∃t ∈R , t [Ai 1] = u [Ai 1] ∧ t [Ai 2] = u [Ai 2] ∧...∧ t [Ai k ] = u [Ai k ] ) } |
これは、あるリレーションの一部の列のみを取り出す演算であり、 例えば、表3に示した「商店Aの商品」の{果物, 単価}の射影は、 表11のようになる。
果物 | 単価 | 販売単位 |
---|---|---|
リンゴ | 80 | 1 |
ミカン | 30 | 5 |
キウイ | 100 | 3 |
|
θを=, >, <など、真偽を定める比較演算子とする。 このとき、R の属性Ai とAj 上の 選択R [Ai θAj ]は、 以下のように定義される。
R [Ai θAj ] = {t | t ∈R ∧ t [Ai ] θ t [Aj ] } |
また同様に、c を定値とし、 R の属性Ai 上のc に関する 選択R [Ai θc ]は、 以下のように定義される。
R [Ai θc ] = {t | t ∈R ∧ t [Ai ] θ c ] } |
この選択演算は、あるリレーションから、 与えられた条件に適合する行を取り出す演算である。 例えば、表12に示すリレーション「商店Aの販売」があるとする。
果物 | 原価 | 売価 |
---|---|---|
リンゴ | 50 | 80 |
ミカン | 10 | 30 |
キウイ | 70 | 50 |
バナナ | 10 | 20 |
メロン | 800 | 500 |
このとき、属性「売価」の値よりも属性「原価」の値が大きい行を選択する演算は 商品Aの販売[ 原価 > 売価 ]と記述することができ、 その演算結果は表13のようになる。
|
リレーションR (A1, A2, ..., Am )および リレーションS (B1, B2, ..., Bn )の θ結合 R [Ai θBj ]S は 以下のように定義される。
R [Ai θBj ]S |
= { (t , u ) |
t ∈R ∧ t ∈R ∧
t [Ai ] θ
u [Bj ] } |
= (R ×S ) [R . Ai θ S . Bj ] |
すなわち、θ結合は、リレーションR とS の直積として得られる リレーションに選択を行う演算である。
例えば、表8および表9に示すリレーションに対し、 県が一致するものに関するθ結合を行った結果は 表14のようになる。
|
|
地域 . 地方 | 地域 . 県 | 特産 . 県 | 特産 . 果物 |
---|---|---|---|
東北 | 青森 | 青森 | リンゴ |
四国 | 愛媛 | 愛媛 | ミカン |
また、複数の条件θ1, θ2, ..., θkに 基づき結合する場合、以下のように記述する。
R [Ai 1 θ1 Bj 1 , Ai 2 θ2 Bj 2 , ..., Ai k θk Bj k ]S |
次に、リレーションR (A1, A2, ..., Am )および リレーションS (B1, B2, ..., Bn )の 共通の属性を{C1, C2, ..., Ck } = {A1, A2, ..., Am }∧ {B1, B2, ..., Bn }とし、 また、 {D1, D2, ..., Dn - k } = {B1, B2, ..., Bn } - {C1, C2, ..., Ck } するとき、R とS の自然結合R *S は 以下のように定義される。
R *S = ( (R ×S ) [A.C1 = B.C1, ..., A.Ck = B.Ck ] ) [A1, ..., Am , D1, ..., Dn-k ] |
例えば、表8と表9に示されるリレーションの自然結合地域 * 特産は、 表15のようになる。
地方 | 県 | 果物 |
---|---|---|
東北 | 青森 | リンゴ |
四国 | 愛媛 | ミカン |
n 次のリレーションR および m 次のリレーションS が、 それぞれ以下のようになっているとする。 ただし、m < n とする。
R (A 1, A 2, ..., A n-m , B 1, B 2, ..., B m ) |
S (B 1, B 2, ..., B m ) |
このとき、R をS で割った商R ÷S は、 以下のように定義される。
R ÷S = { t | t ∈ R [A 1, A 2, ..., A n-m ] ∧ (∀u ∈ S ) ( (t, u) ∈ R ) } |
すなわち商演算は、リレーションS の全ての属性の値を同時に満たす リレーションR の行を選び出し、 S の属性を取り除いた列を取り出す演算である。 たとえば、表16に示す果物の「産地」を示すリレーションと、 表17に示す「需要」を示すリレーションがあった場合に、 需要を同時に満たす産地(の地方と県)は産地 ÷ 需要により求めることができ、 その結果は表18のようになる。
|
|
地方 | 県 |
---|---|
東北 | 福島 |
中部 | 長野 |
表19および表20に示すリレーションがある。 これについて、以下の設問に答えよ。
|
|
「教官」から出身が宮城で、車がルポである行を選択する 教官[出身="宮城", 車="ルポ"] の演算結果を求めよ。
「教官」から氏名と趣味の列を取り出す射影 教官[氏名, 趣味] の演算結果を求めよ。
「教官」から車がレガシーである教官の氏名と出身を求める (教官[車="レガシー"])[氏名, 出身] の演算結果を求めよ。
出身が長野である教官の氏名、出身、趣味を求めるには どのような演算を行えばよいか、その演算式を求めよ。 また、その演算結果を示せ。
講座がシステムである講座と氏名、および講座が開放論である講座と氏名の和 研究部[講座="システム"] + 研究部[講座="開放論"] の演算結果を求めよ。
「研究部」と「教官」の自然結合 研究部 * 教官 の演算結果を求めよ。
「研究部」と「教官」の自然結合から、 講座が認知科学である行の氏名と趣味をもとめる演算 ( (研究部 * 教官)[講座="認知科学"] )[氏名, 趣味] の演算結果を求めよ。
「研究部」と「教官」の自然結合から、 講座が認知科学または開放論であり、車がレガシーである行の 氏名と趣味をもとめる演算 ( ( (研究部 * 教官)[講座="認知科学"] + (研究部 * 教官)[講座="開放論"] ) [車="レガシー"] )[氏名, 趣味] の演算結果を求めよ。
出身が宮城である教官の講座、氏名、車を求めるには どのような演算を行えばよいか、その演算式を求めよ。 また、その演算結果を示せ。
講座が認知科学またはアーキテクチャである教官の氏名と車を求めるには どのような演算を行えばよいか、その演算式を求めよ。 また、その演算結果を示せ。
以下を証明せよ。 ただし、自由課題とし、1問につき20点を加算する。
R ÷S が商演算と呼ばれる理由は、 (R ×S ) ÷S = R が成り立つためである。 (R ×S ) ÷S = R が成り立つことを 定義に基づき証明せよ。
リレーションR および S を R (A 1, A 2, ..., An-m , B 1, B 2, ..., Bm ) , S (B 1, B 2, ..., Bm ) とするとき、 商演算R ÷S は、直積演算、射影演算、差演算により、 以下のように表すことができる。
R ÷S = R [A 1, A 2, ..., An-m ] - ( ( R [A 1, A 2, ..., An-m ] ×S ) -R ) [A 1, A 2, ..., An-m ] |
これを定義に基づき証明せよ。