現在、一番世間で普及しているデータベースは関係データベースである。
関係データベースは、行と列から構成される関係表を用いて、各データの内容や相互関係を整理する。
この表を、リレーションという。
今回は、データベースの主要論点である関係データベースについて観てみたい。
・関係データベースの用語について
関係データベースの表は、次のような要素から構成されている。
各行が一件のデータ(レコード)に、各列が各レコードに含まれるデータ項目(フィールド)に該当する。
・リレーション(表)
表全体のことをテーブルともいう。
・タブル(行)
表の各行のこと。上図だと、3行目の20、初級データベース、200が相当する。
・属性(列)
各行の値のこと。上図だと、商品表の属性は、ID、タイトル、著者IDとなる。
・属性値
各行の値のこと。タイトルの属性値は、データベースの基礎、初級データベース、実用データベースとなる。
・ドメイン(定義域)
属性値の取り得る値の集合。上図にはないが性別のドメインは“男”または“女”となる。
・主キー
関係データベースでは、一つの表に内容がまったく同じである行が複数存在することは許されない。
各行は他の行と区別でき、多数の行の中から、特定の行を1行だけ指定することが可能でなければならない。
この行を一意に特定するために用いられる列を、主キー(Primary Key)と呼ぶ。
社員番号 | 氏名 | 基本給 |
0001 | 佐藤 | 250,000 |
0002 | 佐藤 | 300,000 |
0003 | 鈴木 | 300,000 |
この図だと、社員番号が0001の社員は1人だけである。同姓でも社員番号は異なるわけだ。
主キーは一つの列とは限らず、列の組合せが主キーになる場合もある。
講座番号 | 講座名 | 学生番号 | 氏名 | 学部コード | 学部名 |
001 | 所得税法 | 123 | 川田 | 01 | 法学部 |
001 | 所得税法 | 125 | 税所 | 02 | 文学部 |
002 | 消費税法 | 123 | 川田 | 01 | 法学部 |
002 | 消費税法 | 125 | 税所 | 02 | 文学部 |
002 | 消費税法 | 211 | 手塚 | 03 | 商学部 |
履修表は、講座を受講する学生を記録する表である。
この場合は、{講座番号、学生番号}の組合せが主キーとなる。
なぜなら、一つの講座を複数人が受講する以上、講座番号だけでは行を特定できず、同様に学生が複数の講座を受講する以上、学生番号だけでも行を特定することはできないからだ。
主キーに含まれる列をキー項目、含まれない列を非キー項目という。
・主キー制約
主キーには次のような制約、主キー制約が課せられる。
一意性制約
同じ値をもつ行が存在してはいけない。値により完全に区別できる。
非ナル制約
値が(空値、NULL)となってはいけない。
ナル値は、値がないことを示す特別な値である。主キーに含まれる列にはナル値が許されず、すべての行に具体的な値がはいってなければならない。
また下記のような社員表があったとしよう。
社員番号 | 氏名 | 基本給 | 性別 |
0001 | 伊藤 | 500,000 | 男 |
0002 | 小野寺 | 400,000 | 女 |
0003 | 高橋 | 500,000 | 女 |
同姓同名の社員がいないのであれば、社員番号でも氏名でも行を特定できる。
つまり社員番号、氏名のどちらを主キーにしても構わない。
このように、行を特定できる列(または列の組合せ)のことを、それぞれ候補キーと呼ぶ。
候補キーが複数あるときは、そのうち一つを主キーとして選ぶのである。
・外部キー
外部キーは、ある表を別の表に関連付けるための列である。
関連先の主キーを外部キーとしてもたせる。
従業員表と部署表を関連付けるために、部署表の主キーを従業員表の外部キーとして持たせた。
このとき、従業員表に付与された部署番号のことを、部署表を参照するための外部キーと呼ぶ。
従業員表から部署番号を用いて部署表を参照すれば、各従業員の所属する部署が分かるわけだ。
・参照制約
データベースの整合性を保つために、外部キーには参照制約(外部キー制約)が課せられる。
参照制約・・外部キーの値が参照先の表に必ず存在すること。
参照制約によって、行の追加や削除が制限を受けることがある。
商品表と製造元表の間に参照制約が課せられているとき、次のように制限される。
①製造元表に存在しない製造元番号をもつ商品を、商品表には追加することができない。
②商品の仕入れのある製造元を、製造元表から削除できない。
③商品表の製造元番号は、製造元表に存在する値にしか変更できない。
・E-R図と連関エンティティ
データベースの概念スキーマの設計において、E-R図を用いることが多い。
E-R図はエンティティとリレーションシップに分けて表現されるが、エンティティは表に該当し、リレーションシップはキー同士の関連付けによって表現できる。
外部キーは関連を表現できるのである。
外部キーから見ると、関連する行は主キーなので1行しかない。主キー側から見ると、関連する行は外部キーなので複数行が存在できる。
主キーと外部キーの関連は、1:多となり、外部キーの方が”多”となる。
一方、多:多の関連も考えられる。
ただし、関係データベースにおいては、この多:多の関連は表現しにくい。
そこで連関エンティティをつくって、多:多を1:多と多:1の関係び整理してしまうのである。
受注と商品は多:多の関係だ。
この両者の間に受注明細をすえることにより、1:多の関係を作り上げるのである。
受注から見て受注明細は複数あるし、商品から見ても受注明細は複数あるということである。
・関係データベースの演算
関係データベースでは、実は演算することも可能である。
複数の表を用いて様々な演算を行って目的のデータを得るわけだ。
関係データベースについての演算は、関係演算と集合演算とがある。
・関係演算
関係演算は関係データベース特有の演算である。
選択演算・・指定条件に合う行を取り出す。
射影演算・・指定された列を取り出す。
選択と射影を組み合わせると、一つの表から任意のデータを取り出すことが可能である。
結合演算・・二つの表をある値をもとに組み合わせる。
表記上は商品コードを重複させないようにすることもある。
・集合演算
関係データベースの表には、各行を要素とみなす集合演算を行うことができる。
和演算・・二つの表のいずれかに含まれる行を取り出す。
差演算・・表から他表に含まれる行を取り除く。
共通演算・・双方に含まれる行を取り出す。
直積演算・・双方の表に含まれる行を総当たりで組み合わせる。
直積演算は、双方の表が同じ列構成でなくとも適用できる。
・後記
私は昔から図鑑が好きだった。
小学生の低学年で親に買ってもらった恐竜図鑑や爬虫類・両生類図鑑、昆虫図鑑、鉄道図鑑などなど、飽きずに見ていたものだった。
図鑑とは違うけど、加古里志(かこさとし)さんの絵本も大好きだった。
こういうのも一種のデータベースといえると思う。
関係データベースは便利だとは思うが、画像が無いのがたまにキズかね。