リレーショナルデータモデル入門
下記の本の2章、3章、4章を読んで学んだことを書いておく。
データモデル
データモデルと一般的に言う際には、下記の3つの要素から成り立っている。
- 構造記述: データベースの構成要素の記述
- 意味記述: データベースの一貫性制約の記述
- 操作記述: 検索したり、更新したりするためのデータ操作言語
リレーショナルデータモデル
- 数学の集合論に立脚している。
- データと、データ間の関連をすべてリレーションのタプルで表現する。
- モデルがメモリ空間上でどのように実装されるかについてはまったく無頓着。
- つまり、現場では理論通りではなく、メモリ側の都合に応じて改変する現実もあると言えそう。
ちなみに、このあと書くが「リレーション」という用語には一般的に技術者が思い浮かべそうなリレーションとは違う定義が与えられている。最初読んでいてちょっと混乱した(ちゃんと定義づけされているので、章全体のロジックとしてはまったく問題はない)。
リレーション、ドメイン、直積、タプル
構造記述の話から開始される。
ドメイン(定義域)というのは、端的に言うと集合のことを指す。集合とは異なる元の集まりである。有限集合でも無限集合でも構わない。
ドメインには下記が含まれる。
- カテゴリ?属性?の集合
- 人名の集合
- 給与の集合
- 年齢の集合
- データ型
- NCHARVARYING(10)
- INTEGER
- VARCHAR
- など。
次にドメインの直積を定義する。
この直積集合の各元をタプル(書籍内だとタップル)という。
ここからリレーションを定義する。
つまりどういうことかというと、要するに直積から部分集合を作ったとき、それをリレーションと呼びますよということだと思う。先ほど定義した直積集合から次のようにすると、リレーションRを作ることができる(もちろんこれ以外の組み合わせも考えられる):
Rの各元をRのタプルという。また、Rのタプルの総数を濃度(カーディナリティ)と呼ぶ。このケースではカーディナリティは3?
さらに、先ほどの
リレーションは上記のようにタプルの集合ではあるものの、それを表(table)として表すこともできる。つまりリレーションは実質的にはテーブルということなのかな。テーブルの行と列は一応紹介されているが、テーブルを横に眺めると行、縦に眺めると列になる。
この辺りまでは集合の教科書の復習みたいな感じがする。
ここで、
属性名 = 列名
リレーション名 = 表名
とする。
リレーション名と属性名が導入されると新しいリレーションの定義方法が生まれてくる。
リレーション
すると、リレーション名が
たとえば、下記のようなリレーションについて考えてみる。
名前 | 年齢 |
---|---|
A | 22 |
B | 21 |
C | 20 |
このリレーションについて、リレーションは