データベース設計(データベース)
学習のポイント
表形式で表現される「リレーショナルデータベース(RDB)」の仕組みを理解し、3層スキーマ構造、リレーションの演算、E-R図、正規化、主キーと外部キーの違い、参照整合性、関係従属について理解しましょう。
1. データベースとは? | |||||||||||||||
「データベース」とは、たくさんの情報の蓄え、その中から必要な情報を取得することを言います。そして、そのようなソフトウェアのことを「データベースソフト」と言います。代表的なものに、「Oracle」「SQLサーバ」「MySQL」などがあります。現在、一般的に使用されているデータベースソフトは「リレーショナル(関係)データベース」です。これは、行と列の表形式で表現することが特徴です。 その他として、「階層型(ツリー型)データベース」「網型(ネットワーク型)データベース」があります。この2個を「構造型データベース」と言います。また、「オブジェクト指向データベース」も普及しています。
また、最近注目されているのが、「データウェアハウス」と「データマイニング」です。 ●階層型(ツリー)ネットワークデータベース 木のような構造で、各レコードは、ただ1つの親レコードを許されるタイプのモデルです。 ●網型(ネットワーク型)データベース 各レコードが複数の親レコードをもつことが出来ます。全体として「網目」になっています。 ●オブジェクト指向データベース オブジェクト指向設計をデータベース設計に適用したモデルで、対象世界を、データとそのデータに対する操作を持つ「オブジェクト」の集まりとして定義します。 ●リレーショナル(関係)データベース 関係モデルは「IBMのエドガー・F・コッドによって考案された」理論化されたモデルで、Excelのような表形式でデータを管理しています。各列を「フィールド(属性)」と言い、各行にデータが格納されています。この1行を「レコード(タプル)」と言います。また、1レコードの各項目を「フィールド」と言います。以下のようなイメージとなります |
|||||||||||||||
2. スキーマ | |||||||||||||||
「スキーマ」とは、「データの性質、形式、他のデータとの関連などのデータ定義の集合」という意味です。具体的には、どんな情報をデータ化して、どのような形式でデータベースに格納/利用していくかという「枠組み」のことです。代表的なものに「ANSI/SPARC」が提案した「3層スキーマ構造」があります。 ●3層スキーマ構造 「概念スキーマ(スキーマ)」 対象世界を論理的に表現したものです。関係データベースでは「実表(リレーションスキーマ)」に相当します。 「外部スキーマ(副スキーマ)」 ユーザやアプリケーションといった、実際にデータを活用する立場から見た際のデータ構造を規定したものです。関係データベースでは、「ビュー」に相当します。 「内部スキーマ(記憶スキーマ)」 媒体への物理的な格納形式を規定したものです。
|
|||||||||||||||
3. E-R図 | |||||||||||||||
概念スキーマのプロセスでは、対象世界を図解して整理する場合、代表的なものとして「E-R図」があります。 E-R図では、「対象世界」を「エンティティ(実体)」と「各実体のリレーションシップ(関係)」で表現する技法です。E-R図では。エンティティを□で、関係をひし形または線で結びます。 この関係には「1対1」「1対多」「多対多」の3種類があります。 |
|||||||||||||||
4. リレーションの演算 | |||||||||||||||
リレーションを操作する際の演算を「関係代数」と言います。以下のものがあります。 ●和演算(∪) 属性項目が同じレコードをすべて合わせる演算です。 ●差演算(-) 片方のリレーションから、もう一方のリレーションに含まれているレコードを取り除く演算です。 ●共通演算(∩) 双方のリレーションに共通しているレコードを取り出す演算です。 ●直積演算(×) 各リレーションのレコードどうしを「総当たり」で組合わせる演算です。 ●射影 指定した列を抜き出す演算です。 ●選択 指定した行を抜き出す演算です。 ●結合 複数の表を結びつける演算です。 |
|||||||||||||||
5. 重要なキー | |||||||||||||||
データベースには、以下の3種類の重要なキーがあります。 ●主キー…特定のレコードを一意(ユニーク)に識別するためのものです。主キーの制約は、「同じ値はダメ」「空値(null値)はダメ」の2つです。 ●外部キー…その表の主キーではないが他の表で主キーになっているものです。これにより2個の表の関係が関連づきます。 ●インデックス…データベースを検索や並び替えを高速化するためのキーです。インデックスは確かに便利なものですが、たくさん付けるとHDDや主記憶にも記憶領域が必要なため、データの追加などには時間がかかる場合があります。 |
|||||||||||||||
6. 正規化 | |||||||||||||||
「正規化」とは、データの繰り返しや重複する部分を取り除き、表自体をシンプルで整合性を持った複数の表に分割することを言います。一般的には、「第1正規化」「第2正規化」「第3正規化」に分けられます。また、正規化がされていない場合は「非正規化」と言います。 正規化の目的は、冗長性を排除して、更新異常を防止するために行います。 例えば、以下の表(テーブル)を考えてみましょう。 生徒番号 氏名 科目 得点 ●非正規化の場合 生徒番号 氏名 科目 得点 00111 太郎 数学 30 国語 50 00222 二郎 数学 25 ここでは、科目が複数あり、2行になっていることに注目して下さい。 ●第1正規化(集団項目や繰り返し項目をなくす) 上記の科目を1行にまとめます。 生徒番号 氏名 科目 得点 00111 太郎 数学 30 00111 太郎 国語 50 00222 二郎 数学 25 ●第2正規化(主キーの一部に従属する列を別の表として独立させる) ここでは、生徒の情報と成績の情報を2個の表に分割します。 ・[生徒テーブル] 生徒番号 氏名 00111 太郎 00222 二郎 ・[成績テーブル] 生徒番号 科目 得点 00111 数学 30 00111 国語 50 00222 数学 25 ●第3正規化(非キー列に従属する列を、別の表として独立させる) ・[生徒テーブル] 生徒番号 氏名 00111 太郎 00222 二郎 ・[成績テーブル] 生徒番号 科目コード 得点 00111 10 30 00111 20 50 00222 10 25 ・[科目テーブル] 科目コード 科目名 10 数学 20 国語 ここで、太字の下線の部分が主キーです。 成績テーブルのように複数のフィールドを主キーにすることを「連結キー」と言います。 ここで表の結合する際、例えば、生徒テーブルと成績テーブルの場合は、生徒番号で結合することが出来ます。この時、成績テーブルの生徒番号を「外部キー」と言います。 正規化を行う最大のメリットは、データの一元管理ということです。これは、データを修正を行う場合、1個の表のフィールドのみ修正することで済みます。例えば、氏名に修正が発生した場合は、生徒テーブルの氏名のフィールドのみの修正で良い訳です。 つまり、第3正規化の目的は「冗長性を排除することによって、更新時の異常を回避すること」です。 正規化は便利ですが、「更新の可能性が少なく、応答性能を重視するならば」「非正規化」も考える必要があります。 ●参照整合性とは? テーブル間のリレーションを無視したレコードができないようにする規則・仕組みです。 例えば、上記で「生徒テーブル」と「成績テーブル」の関係は「1対多」のリレーションです。このとき、多側テーブル「成績テーブル」に存在するレコードに、対応する一側の「生徒テーブル」のレコードが必ず存在しないとおかしいです。つまり、「生徒テーブルに存在しない生徒番号が成績テーブルに存在してしまう」ことはおかしいということです。このように状態が崩れないようにする規則・仕組みが参照整合性です。科目テーブルと成績テーブルの関係も1対多のため参照整合性となる必要があります。これも「成績テーブルに存在する科目コードは、必ず、科目テーブルに存在しなくてはならない」ということです。 |
|||||||||||||||
7. 関係従属 | |||||||||||||||
「関係従属」とは、主キーの内容が決まれば、「レコードが1件」に確定するというように、ある属性集合Xの値が定まれば、別の属性集合Yの値が一意(ユニーク)に決定することを「YはXに関係従属する」と言い、「X→Y」のように表現します。上記の成績テーブルの場合は、{生徒番号、科目コード}→{得点}というように表現します。
3つのテーブルを解答群より「テーブル1」「テーブル2」「テーブル3」とします。
・テーブル1…aを主キーとして、b c d eが一意に決定します。 |
|||||||||||||||
8. 演習 | |||||||||||||||
※平成28年秋期午後問3より抜粋
●会員表と入園者表 会員表はある人物を管理するテーブルです。その人が遊園地へいくごとに管理するのが入園者表です。従って、「1対多」の関係となります。 ●入園者表と券種表 色々な人が入園するのを管理するのが入園者表です。その際に券種は何かを管理しているのが券種表です。従って、「多対1」となります。 ●入園者表と利用表 利用表は、入園したある方、1人がどのアトラクションを利用したかを管理します。複数のアトラクションを利用する場合もあります。従って、「1対多」となります。 ●利用表とアトラクション表 アトラクション表は、アトラクションの種類を管理しています。利用表は、入園者がどのアトラクションを利用したかを管理しています。従って、「多対1」となります。 以下のようになります。 |