1. 概要

 データ中心設計(DOA: Data Oriented Approach)は、ソフトウェア設計手法の一つで、システムで扱うデータの構造や関連性に焦点を当てたアプローチです。この手法は、データの安定性に着目し、業務で扱うデータとその関係を明確にすることで、長期的に安定したシステム設計を実現することを目的としています。

 DOAの重要性は、以下の点にあります:

  1. データの一貫性と整合性の確保
     DOAでは、データを中心に設計を進めるため、データの一貫性や整合性を保つことが容易です。これにより、システム全体の信頼性が向上します。
  2. システムの柔軟性と拡張性の向上
     データモデルに基づいた設計を行うことで、業務プロセスの変化や新しい機能の追加にも柔軟に対応できます。
  3. 業務プロセスの変更に対する適応力の強化
     業務が進化する中で、データ中心のアプローチは、システムの再設計や部分的な修正に強く、適応力が高いことが特徴です。

2. 詳細説明

2.1. データ中心設計の基本概念

 データ中心設計では、以下の主要な概念が重要です:

  1. 実体(エンティティ)
     業務で扱う具体的なオブジェクトや概念を表します。例えば、「顧客」「商品」「注文」などが実体に該当します。
  2. 関連(リレーションシップ)
     実体間の関係性を表します。例えば、「顧客」と「注文」の間には「顧客が注文する」という関連があります。
  3. 属性
     実体の特性を表す情報です。例えば、「顧客」の属性には「顧客ID」「氏名」「住所」などがあります。

2.2. E-R図(Entity-Relationship Diagram)

 E-R図は、実体と関連を図式化したもので、DOAの中心的なツールです。E-R図を使用することで、以下の利点があります:

  1. データ構造の視覚化
     データの構造や関係性が視覚的に整理され、複雑なシステムでも理解しやすくなります。
  2. 関係者間のコミュニケーション促進
     E-R図は、技術者と業務担当者の間でデータ構造についての共通理解を深める手助けをします。
  3. データベース設計の基礎資料としての活用
     E-R図は、データベース設計の基礎となる資料として活用され、データベース設計の効率化に寄与します。

発注する

含む

顧客

int

customerID

string

name

string

address

注文

int

orderID

date

orderDate

int

num

商品

int

productID

string

productName

int

price

図1:基本的なE-R図の例

2.3. 正規化

 正規化は、データの冗長性を排除し、一貫性を確保するためのプロセスです。主な正規化の段階は以下の通りです:

  1. 第1正規形:繰り返しグループの除去
     データの繰り返しを排除し、表形式で一意の値を持つ行を形成します。
  2. 第2正規形:部分関数従属の除去
     主キー全体に従属していないデータを別のテーブルに分けます。
  3. 第3正規形:推移関数従属の除去
     非キー属性間の依存関係を取り除き、さらにデータを分割します。

第3正規形

第2正規形

第1正規形

非正規形

繰り返しグループの除去

部分関数従属の除去

部分関数従属の除去

推移関数従属の除去

推移関数従属の除去

推移関数従属の除去

推移関数従属の除去

推移関数従属の除去

推移関数従属の除去

学生情報 = 学生ID, 氏名, 科目1, 成績1, 科目2, 成績2, ...

学生科目 = 学生ID, 氏名, 科目, 成績

学生 = 学生ID, 氏名

学生科目 = 学生ID, 科目, 成績

学生 = 学生ID, 氏名

科目 = 科目コード, 科目名

学生科目 = 学生ID, 科目コード, 成績

図2:各正規化段階の例

 この図は、学生の科目登録情報の正規化過程を示しています。各段階の説明は以下の通りです:

  1. 非正規形:
    • 学生の情報と複数の科目、成績が1つのレコードにまとめられています。
    • 科目と成績の組が繰り返し出現する構造になっています。
  2. 第1正規形:
    • 繰り返しグループを除去し、各科目と成績の組を独立した行として表現しています。
    • これにより、任意の数の科目を扱えるようになります。
  3. 第2正規形:
    • 主キー(学生ID, 科目)の一部である学生IDにのみ依存する属性(氏名)を別テーブルに分離しています。
    • これにより、学生情報の重複を避けられます。
  4. 第3正規形:
    • 非キー属性間の依存関係(科目名が科目コードに依存)を除去するため、科目テーブルを作成しています。
    • これにより、科目情報の一貫性が保たれ、更新時の矛盾を防ぎます。

 この正規化の過程を経ることで、データの冗長性が減少し、一貫性と整合性が向上します。また、データ操作(挿入、更新、削除)時の異常を防ぐことができます。

2.4. 一事実一箇所の原則

 一事実一箇所の原則は、特定のデータ(事実)が1か所にのみ存在すべきという考え方です。これにより、データの一貫性維持や更新作業の効率化が図れます。例えば、顧客の住所情報を1か所にしか保存しないことで、住所が変更された際にシステム全体での整合性を保ちやすくなります。

3. 応用例

 データ中心設計は、以下のような業界やシステムで広く応用されています:

  1. 企業情報システム
     顧客管理システム、在庫管理システム、受発注システムなど、企業の基幹業務システムの設計において利用されています。
  2. Webアプリケーション
     ECサイトやSNSなど、リアルタイムで大量のデータを処理するWebサービスでもDOAは有効です。これにより、データの整合性と効率的なアクセスが確保されます。
  3. データウェアハウス
     企業の意思決定支援システムやデータ分析基盤の設計において、DOAは重要な役割を果たしています。膨大なデータを扱う際にも、データの一貫性を保ちながら効率的な分析を実現できます。

4. 例題

例題1: E-R図の作成

問題:
 ある図書館システムのE-R図を作成してください。以下の要件を考慮してください。

  • 図書館には複数の本がある
  • 本には著者がいる(共著の場合もある)
  • 会員は本を借りることができる
  • 1冊の本は同時に1人の会員しか借りられない

回答例:
実体:本、著者、会員
関連:

  • 本と著者:多対多(中間テーブル「執筆」を作成)
  • 本と会員:多対多(中間テーブル「貸出」を作成)

属性例:

  • 本:ISBN、タイトル、出版年
  • 著者:著者ID、氏名
  • 会員:会員ID、氏名、住所

書かれる

書く

借りる

貸し出される

string

ISBN

string

title

int

pYear

執筆

string

ISBN

int

authroID

著者

int

authroID

string

name

会員

int

memberID

string

name

string

address

貸出

int

rentalID

string

ISBN

int

memberID

date

rentDay

date

returnDay

図3:図書館システムのE-R図

例題2: 正規化

問題:
 以下の「注文」テーブルを第3正規形まで正規化してください。

注文ID顧客名顧客住所商品名商品単価注文数量注文日

回答例:

  • 第1正規形:
    変更なし(既に第1正規形を満たしている)
  • 第2正規形:
    顧客テーブル(顧客ID、顧客名、顧客住所)
    商品テーブル(商品ID、商品名、商品単価)
    注文テーブル(注文ID、顧客ID、商品ID、注文数量、注文日)
  • 第3正規形:
    変更なし(既に第3正規形を満たしている)

 以下に正規化の各段階でのテーブルの構造を示す表を示します。

非正規形(元のテーブル)

注文ID顧客名顧客住所商品名商品単価注文数量注文日
1山田太郎東京都新宿区パソコン80,00022023-05-01
2鈴木花子大阪府大阪市プリンター30,00012023-05-02
3山田太郎東京都新宿区マウス5,00032023-05-03

第1正規形

(変更なし – すでに第1正規形を満たしているため)

第2正規形

顧客テーブル:

顧客ID顧客名顧客住所
1山田太郎東京都新宿区
2鈴木花子大阪府大阪市

商品テーブル:

商品ID商品名商品単価
1パソコン80,000
2プリンター30,000
3マウス5,000

注文テーブル:

注文ID顧客ID商品ID注文数量注文日
11122023-05-01
22212023-05-02
31332023-05-03

第3正規形

(変更なし – すでに第3正規形を満たしているため)

5. まとめ

 データ中心設計(DOA)は、ソフトウェア開発においてデータの構造と関連性に焦点を当てたアプローチです。主要な概念として実体、関連、属性があり、これらをE-R図で表現します。正規化や一事実一箇所の原則を適用することで、データの一貫性と整合性を確保し、柔軟で拡張性の高いシステム設計が可能となります。

 この手法は、大規模なデータを扱うシステムや、長期的な運用が想定されるシステムの設計に特に有効です。