SIGMA-SE Tech Blog

SIGMA-SE Tech Blog

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

目的

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

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

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

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

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

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

データベースの種類

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

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

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

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

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

E-R図

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

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

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

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

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

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

また、上記対応関係(カーディナリティ)E-R図に表す際、次のUML表記(多重度表記ルール)で表現する場合もある。

多重度表記 意味
\(*\) \(0\) 以上の整数すべて
\(1\) . \(*\) \(1\)以上の整数すべて
\(0\) .. \(1\) \(0\) または、\(1\)
\(1\) \(1\) のみ
\(a\) .. \(b\) \(a\) から \(b\) までの整数

データベースモデル

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

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

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

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

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

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

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

データベース設計

データ仕様の基盤となるデータベース設計のアプローチ手段として、以下 \(2\) 種類の方法がある。

※ 以降、主キー、候補キー、非キー属性の説明は割愛。

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

    1. システム要件からエンティティを洗い出し、リレーションシップを定義し、E-R図を作成する。
    2. それぞれのエンティティが持つ各データの属性を洗い出し、リレーションシップを考慮して主キーを決定する。
    3. 正規化(以下「データベースの正規化」に記載)を実施し、多対多のリレーションシップを排除する。
  • ボトムアップアプローチ
    現行システムまたは、次期システムで使用する画面や帳票などを基にデータモデルを作成し、設計する手法で大別して以下の流れとなる。

    1. 画面仕様や帳票仕様からデータ属性の洗い出し、リレーションシップを定義する。
    2. リレーションシップを基に主キーを定義し、テーブルの正規化(以下「データベースの正規化」に記載)を実施する。
    3. テーブル構成からE-R図を作成する。

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

データベースの正規化

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

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

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

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

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

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

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

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

テーブル間の制約

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

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

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

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

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

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

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

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

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

  • データベース設計の変更
    パフォーマンスが向上するようテーブル構造やリレーションシップを変更する。
    代表例として、正規化をあえて崩す、非正規化がある。

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

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

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

参考文献

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


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp