UNISIA-SE Tech Blog

気まぐれお勉強日記

[応用情報技術] [基礎] [18] 覚書き : データベース(モデル, 設計, 正規化)

1. 前提条件


このページでは、応用情報技術者試験の出題分野である データベースのモデル, 設計, 正規化 に関する覚書きを列挙する。

一度内容を理解したことを前提とし、最低限の解説に留めていることに注意。

2. データベース管理システム


データベース管理システム(DBMS:DataBase Management System) とは、データの安全保管整合性 の保つことを目的にした管理システムを指し、次の機能に大別される。

メタデータ管理
データとメタデータ(データの付帯情報が記載されたデータ)を管理する。

クエリ管理
データベースに対して処理要求(問合わせ)を行うクエリ(SQL)を管理する。

トランザクション管理
排他制御や障害回復など複数のトランザクションを管理する。

3. データベースの種類


上記 DBMS は、以下のデータベース(種類)に大別される。

階層型データベース
データを親ノードと子ノードから成るツリー状(階層型)で表現する手法。
子ノードを重複登録しない限り、子ノードが複数の親ノードを持つことはできないが、対象データ(ノード)までのルートが限定的となるため、処理速度が速い。

ネットワーク型データベース
データを親ノードと子ノードから成る網状構成で表現する手法。
網状構成なため、重複登録が不要で子ノードが複数の親ノードを持つことができるが、データの抽出や特定手段がデータ構造に依存するため、データ構造について熟知していないとデータアクセスが難しい。

関係型データベース (リレーショナルデータベース:RDB)
レコード(行)、フィールド(列)から成るテーブル同士の関連付けでデータを表現する手法。
柔軟なデータの取扱いができ、複雑な関係性を表現できるが、大規模なテーブル構造になるとデータの抽出や特定方法が複雑になり、処理速度が遅くなる傾向がある。

オブジェクト指向データベース
オブジェクト指向に対応し、データそのものとデータの処理方法を1つのオブジェクトとしてデータを表現した手法。
複雑なデータ構造を高速に処理でき、多様なデータ形式を束ねて管理する場合に適している。

4. E-R図


E-R図(Entity-Relationship Diagram) とは、テーブルなどのデータ単位で分類された一つの集合データで、エンティティ とその リレーションシップ(関連性) を表すデータ構造の設計図を指す。

また、リレーションシップ には、以下4つの 対応関係(カーディナリティ) がある。

1 対 1
1つのデータ に対する関連データが ただ1つ である場合のリレーションシップ。

1 対 多
1つのデータ に対する関連データが 複数 ある場合のリレーションシップ。

多 対 1
複数データ に対応するデータが ただ1つ である場合のリレーションシップ。

多 対 多
複数データ に対応するデータが 複数 ある場合のリレーションシップ。

また、上記 対応関係(カーディナリティ)E-R図 に表す際、 次の UML表記(多重度表記ルール)で表現する場合もある。
多重度表記 意味
*0以上の整数すべて
1..*1以上の整数すべて
0..10 または、1
11のみ
a..ba から b までの整数

5. データベースモデル


データベースモデルは、ユーザーへの見せ方やシステムに対する追加要件など柔軟に対応できるよう以下のデータモデルとスキーマに分類され構成される。

概念データモデル
データの定義とデータ同士の関係性を表したデータモデルのことで E-R図 ようなデータ設計を指す。

論理データモデル (外部モデル)
ユーザーや外部システム向けにデータを収集する対象とその関係性を論理的に記述したデータモデルを指す。

物理データモデル (内部モデル)
論理データを内部(主にサーバー)向けに実際のデータ構造を視覚的に表現したデータモデルを指す。

概念スキーマ
概念データモデル のデータ定義を要素や関係性についてより詳細に表現したもの。

論理スキーマ (外部スキーマ)
ユーザーや外部システム向けに特定のデータ管理をする目的を前提として、概念スキーマ のデータを外部参照用データ(ビュー)として表現したもの。

物理スキーマ (内部スキーマ)
概念スキーマ で定義された論理データをDBMS内部にどう格納するか具体的なデータ構成やデータ型を定義して表現したもの。

6. データベース設計


データ仕様の基盤となるデータベース設計のアプローチ手段として、以下 2種類の方法がある。
※ 以降、主キー、候補キー、非キー属性の説明は割愛。

トップダウンアプローチ
利用者の要望を基にシステム要件からデータモデルを作成し設計する手法で大別して以下の流れとなる。

\((1)\) システム要件からエンティティを洗い出し、リレーションシップを定義し、E-R図 を作成する。

\((2)\) それぞれのエンティティが持つ各データの属性を洗い出し、リレーションシップを考慮して 主キー を決定する。

\((3)\) 正規化(以下「7. データベースの正規化」に記載) を実施し、多対多のリレーションシップを排除する。

ボトムアップアプローチ
現行システム または、次期システムで使用する画面や帳票などを基にデータモデルを作成し、設計する手法で大別して以下の流れとなる。

\((1)\) 画面仕様や帳票仕様からデータ属性の洗い出し、リレーションシップを定義する。

\((2)\) リレーションシップを基に 主キー を定義し、テーブルの 正規化(以下「7. データベースの正規化」に記載) を実施する。

\((3)\) テーブル構成から E-R図 を作成する。

また、上記アップアプローチから設計したデータベースに対して、物理設計 では、アクセス効率、記憶効率の最適化を図り、データ保存もシステム要件に沿うようにHDDだけでなく、RAIDやSSDを用いるなどシステム構成から変更する場合もある。

7. データベースの正規化


正規化とは、データの整合性を確実に保つため(更新時異状の排除)、1つのデータを1ヵ所に保管できるようにデータ構造を最適化することを指す。

例えば、重複定義されているデータを抜き出し、別テーブルにまとめることで1ヵ所にデータ保管する構造へ正規化する。

正規化の手順は、下記の通り。

第1正規形:冗長性の排除
データ不整合の原因となる冗長性を無くすため、同類の属性を排除し、フィールド単位で定義されるデータの最小単位(ドメイン) が単一でない場合、ドメインを分割して正規化する。
(例えば、2つのデータを結合した ドメイン がある場合、ドメイン を2つに分け、それぞれが単一データとなるように正規化する。)

第2正規形:部分関数従属の排除
※ 第1正規形であることが前提。
すべての 非キー属性各候補キー完全関数従属(※2) させる正規化で、部分関数従属(※3)している属性を抜き出して排除し、別テーブルにする。

※1 関数従属とは、ある属性Aが決まったら別属性Bも一意に決まる状態を指す。
※2 完全関数従属とは、テーブル内の各属性が全候補キーに関数従属している状態を指す。
※3 部分関数従属とは、テーブル内の各属性が一部の候補キーに関数従属している状態を指す。

第3正規形:推移的関数従属の排除
※ 第2正規形であることが前提。
非キー属性 をどの 候補キー にも 推移的な関数従属(※) させないようにする正規化で、候補キー以外の属性に関数従属している属性を抜き出して排除し、別テーブルにする。

推移的な関数従属 とは、属性A→B、属性B→Cのように関数従属の連鎖関係を指し、このとき、属性Aが 候補キー、属性Bが 候補キー以外、属性Cが 非キー属性 となる。

8. テーブル間の制約


関係型データベース(リレーショナルデータベース)では、リレーションシップを維持するためにテーブル間で下記の制約を設ける。

一意制約 (ユニーク制約)
テーブルの登録・更新時に既存レコードのフィールド設定値と重複する値は、許容しない制約。

NOT NULL制約 (非ナル制約)
テーブルの登録・更新時のフィールド設定にNULLを許容しない制約。

主キー制約
一意制約NOT NULL制約 を合わせた制約。

参照制約 (外部キー制約)
テーブルの登録・更新時に他テーブルの特定フィールドの指定された値のみ許容する制約。

ドメイン制約
フィールド単位に指定した条件を満たしたデータのみ許容する制約。

検査制約 (CHECK制約、形式制約)
ドメイン制約 のうち、設定する値がとる範囲の条件や形式に関する制限をかけた制約。

9. データベースのパフォーマンス改善


データベース設計後の性能に関する問題でデータベースのパフォーマンスが起因するケースがある。
その対策となるパフォーマンス向上手段として、次の改善方法がある。

データベース設計の変更
パフォーマンスが向上するようテーブル構造やリレーションシップを変更する。

代表例として、正規化をあえて崩す、非正規化 がある。
例えば、第1正規形同類属性の排除 をせず、テーブルの分割を避け、参照テーブルを減らすことでデータ抽出や登録・更新の処理速度を改善する。

SQLのパフォーマンスチューニング
テーブル結合の順序変更やEXISTS句を用いた判断の簡略化などSQLを効率良く処理できるようにチューニングする。

DBMSの機能を利用
インデックスの設定やデータベースの再編成によるアクセス効率アップ、インメモリーデータベース
(※) などDBMSの機能を利用して高速化する。
※ DBMSのデータすべてをメモリ上に展開し、ディスクの入出力を無くすことで高速化を実現する。

以上。


【参考文献】
瀬戸 美月 (2020) 『徹底攻略 応用情報技術者教科書』株式会社インプレス


Copyright UNISIA-SE All Rights Reserved.
s-hama@unisia-se.jp