Chiroru's Diary

日々の学びをちょこちょこメモしていきます

DB設計の手順

データベース設計(論理設計)について学習したので、その方法をまとめていきたいと思います。

【✏️目次】

論理設計の手順

論理設計とはRDBにおいて、データから何をどのようなフォーマットで保存するかを決めること。

今回2冊の本を読んだので、2通りのやり方を書こうと思います。

『達人に学ぶDB設計徹底指南書』より

設計のステップは以下となる。

1. エンティティの抽出  
2. エンティティの定義  
3. 正規化する(1~3段階)  
4. ER図の作成  

1. エンティティの抽出

システムのためにどのようなエンティティ(データ)が必要になるかを抽出する。

2. エンティティの定義

エンティティがデータをどのような属性(列)で保持するかを定義する。

3. 正規化(1~3段階)

データの冗長性を排除して、一貫性を持たせることで更新時の不都合を防ぐことが目的。 実務では5段階あるうちの第1~第3正規形までを考えることが多い。 (またこの逆の操作は結合である)

第1正規形

「一つのセルには一つの値(=スカラ値)」しか含まないこと。

第2正規形

主キーの一部の列に対して従属する列(部分関数従属)を、主キーに全ての列に対して従属する列(完全関数従属)にすること。

第3正規形

テーブル内に存在する段階的な従属関係(推移的関数従属)によるデータ登録時の不都合を、デーブルを最適に分割することで解決すること。

4. ER図の作成

エンティティの見取り図の作成。それぞれの関係性を表記方法に従い記述する。
「多対多」の関係にあるエンティティの場合、「関連実体」というエンティティを用いて「1対多」に分解する。 関連実体では、多対多の関係にある2つのエンティティの主キーを組み合わせたキーを、主キーとして持つ。

『楽々ERDレッスン』より

設計のステップは以下となる。

1. イベント系テーブルの洗い出し
2. リソース系テーブルの洗い出し
3. 各テーブルに項目を追加する
4. リレーションシップを設定する

1.2各種テーブルの用意

テーブル(エンティティ)を洗い出す。

イベント系 洗い出し

「イベント系」とは、「〜する」などの行為の記録となるもののことを指す。

リソース系 洗い出し

「リソース系」とは、イベント系テーブルに対して「誰が」「何を」するのかを指す。

3. 各テーブルに項目を追加

各テーブルのカラムを洗い出し、追加する。

4.リレーションシップを設定

レコードを特定するためには値が変動することのない主キーが必要になるので、「テーブル名+ID」のようにIDを導入し、テーブル同士の関連付けを行う。

関連ワードのメモ

関数従属

2つの項目があり、1つの値が決まれば自ずともう一方の値も特定できる関係のこと。例えば「商品コード→商品名」など。

キー

「商品コード→商品名」でいう商品コードの方を、識別子またはキーと呼ぶ。 キーは正しくは「候補キー」といい、これはテーブル構造によっては主キーになり得る可能性があるという意味合い。

主キー

レコードを一意に識別するための項目。

項目が主キーとして使用できる基準は

  • Not NULL制約がある
  • 重複がないこと
  • 値が変更されないこと

複合キー

単体では主キーになれないものを、組み合わせることで一意に特定可能となり、主キーに使用できるキーの組み合わせのこと。
例えば、商品名と連番(同じ名称がきたら番号をずらす)など。

ER図作成ツールについて(VSCode)

普段私はVSCodeを使用しているのですが、ちょうどDraw.ioがプラグインとして利用できるようになったこちらを使用してみました。

私は作図後にエクスポートしようとしたらできなかったので、以下を参考に設定をしました。

まとめ(感想)

今回DB設計を1から学ぶにあたって2冊の参考書を利用しました。
はじめ『楽々ERDレッスン』を読んでいたのですが、語彙など理解ができないことが多く、一度読むのを中断して『達人に学ぶDB設計徹底指南書』を読みました。こちらは初心者にも優しい丁寧な解説が書いてあり、スラスラ読み進めることができました。その後、『楽々ERDレッスン』を読みなおすとスムーズに読むことができるようになっていました。
設計は2冊の方法を網羅的に考えることで進めやすくなりました!

参考