スキーマ構築

情報を取り出すには適切なデータベースの枠組みが必要である。 データベースの枠組みをデータベーススキーマと呼ぶ。

関係データベースでは、2 次元表の属性を何にするか、が重要である。 これをデータベースの論理設計と呼ぶ。 関係スキーマは、関係名と属性を記述した情報のこと。

データベースの構造が理解しやすい場合は、 データ更新にも矛盾が生じにくい。

データベース設計

関係表の論理モデルによる設計は、ER 図の設計と 2 段階を踏んで行われる。

オブジェクトデータベースという、 オブジェクト指向プログラミング言語を用いたデータベースアプリケーション開 発もある。

ER 図を用いた関係データベース設計

ER 図を用いた関係データベースの設計は以下のとおり。

  1. ER 図を用い実世界の対象を記述する
  2. 得られた結果をもとに関係モデルによるスキーマを作成
  3. 得られたスキーマを検討し、必要に応じて 正規化 を行う

関係モデルを直接用いた関係データベース設計

1 は行わない。 2 を変更し、対象を関係モデルで記述したあと、3 を行う。

オブジェクト指向モデルを設計用いた関係データベース設計

1 をオブジェクト指向モデルを用いる。 2 は ER 図よりも自由度が高いため、 複雑になる。

オブジェクト指向データベースの設計

対象をオブジェクト指向モデルで記述し、そのまま結果をデータベースのスキーマ情報に する。段階を踏まない設計が可能である。

ただし、関係データベースのような正規化など、 よいスキーマを探す手順が確立されていない。

教員の講義時間割

以前作成した、部分的にデータを取り出す Ruby 言語のプログラムはこちら。 これを時間割に表示するように変更しよう。

必要なキーは、教員名と、前期後期の別である。 取り出すには、例えば このように する。

ER 図を用いた関係データベースの検討

ER 図を用いた関係データベースの検討をするために、 更新異常が発生した場合を考えよう。

データ {教員名, 曜日, 時限, 時期, 科目, 教室}

について考えよう。

この問題は、関係表を適切に分割することで、解決ができる。 これを正規化という。

正規化の手続き

段階を踏む。

ER 図の作成

まずは ER 図を作る。

第 1 正規形

2 次元表を打ち出す。

同じレコードに 2 つの情報が , でつながれていたら、分離する。

関数従属

関係 R において、部分集合 X, Y がある場合、 X が決まると Y が決まる場合を関数従属という。

完全関数従属

Y が X に関係従属であり、かつ X の真部分集合には関数従属でないとき、 Y が X に完全関数従属するという。 真部分集合とは、X の部分集合が X と同一ではないとき、である。

全ての属性は主キーに関数従属である。 関数従属の関係は内容が更新されても変更されない。

関係スキーマ R の部分集合 S, T を考えたとき

R = S + T

が可能であるとき、S, T は Rの分解。分解された関係を関係表に射影する。 もとの関係 R を S と T の結合で表すことができる。

一般には損失が発生することがあるが、 自然結合によりもとの関係を得られるとき、 無損失分解とよぶ。 正規化では無損失分解を行う。

関数従属に基づく正規形

関数従属に基づく正規形の中で、 第 2 正規形、第 3 正規形について解説する。

第 2 正規形

第 2 正規形: 第 1 正規形でかつキーでない属性が各候補キーに完全関係従属していること。

関数従属である候補キーが存在するとき、 情報の重複による更新異常が発生することがある。 無損失分解によって、第 2 正規形に分解する。

推移的関数従属

推移的関数従属: 関係の属性間に X -> Y, Y -> Z という関数従属性があるとする。

データベース作成

2 つの 2 次元表を製作する。 それぞれから選んで結果を出すような例を考えよ。

次回作成したものを発表する。

表の取り出し方

2 種類の表を使うときは、 . でつないで表す。

属性.表

あいまい検索

LIKE %foo で *foo を、LIKE var% で var* を、LIKE %baz% で *baz* を検索。

空白文字が含まれている場合は trim(属性) が必要。