データベースの設計について
概要
データベース設計についての基礎的な流れなどを記載しております。学習のメモとして記事にしております。
主に、初学者向けの記事です。
データベースとは
アプリで使用するデータが保管される、データの保存場所のこと
顧客情報や商品情報など、アプリで使用する情報やユーザが登録する情報などが格納されており
アプリは、そのデータを呼び出して使用している。
基本的にRDBと呼ばれるデータベースが一般的に使用されている
データベースの構造
データベースはテーブルの集合である。
テーブルは、カラムとレコードで構成される
以下の例では、カラムがid,fruit,price、レコードが行の情報(id:1, fruit:apple, price:300)になる。
id | fruit | price |
---|---|---|
1 | apple | 300 |
2 | banana | 250 |
3 | grape | 400 |
4 | orenge | 250 |
RDBにおいて、主キー(プライマリキー)の設計が必要となる。
主キーとは、レコードを個別に特定できる値のことで、上記の例だとidやfruitはレコードの特定に使用できる(データの値が被ることはない)が、priceは同じデータが複数あるため主キーにはならない(レコードを特定するキーとはならない)
上記のテーブルが複数あり、相互に関連しているデータの集合体をデータベースと呼ぶ。
アプリで使用する際は、データの格納がうまく設計されていないと、データに矛盾が生じシステムそのものの信頼に直結する重要な部分であるため、データベースの設計は開発においても重要なポイントであると言える。
開発手順
以下の開発手順で基本的に進められる。
1.要件定義
2.設計
3.実装
4.リリース
要件定義
なんのデータを保管するか、どの形式で保管するかを決める。
テーブルの数やカラムの種類など
設計
要件定義をもとにテーブルを設計する
実装〜リリース
設計をもとに、テーブルを定義し構築、リリースする
データベース設計の手順
データベース設計の手順は以下の流れで行われる。
1.データ抽出
2.エンティティの定義
3.正規化
4.ER図
5.テーブル定義
6.インデックス定義
※1~4は論理設計、5~6は物理設計と呼ばれる
データの抽出
使用するデータを洗い出し、テーブルに格納していく作業
要件に沿ったデータが揃っているかなどの確認を行う
エンティティの定義
エンティティとは実体のことで、データを入れる箱のようなもの
参照:https://wa3.i-3-i.info/word11594.html
正規化
テーブルがデータの矛盾が起きないような構造になっているか正規化する。
・第一正規化
一つのセルに一つの値が入っている状態にする
・第二正規化
部分関数従属性の排除
※関数従属とは、主キーが定まれば列の値が一意に決まる状態のこと
例:id=1が決まれば、appleが決まる
部分関数従属性とは、複合キーが決まることで列の値が決まる状態のこと
主キーだけでは列の値が全て決まるわけではなく、他のデータも必要になる状態のこと
・第三正規化
推移関数従属性の排除
※推移関数従属性とは、主キーが決まれば他の値Aが決まり、Aの値が決まれば値Bが決まる、というように
多段階で関数従属が起きる状態のこと
ER図
テーブル同士の関係性を図で表したもの
基本的に1対nの関係で表されるが、n対n構造の物があった場合中間テーブルを作成する必要がある。
テーブル定義
実際にテーブルに記載するルールを作成する
テーブル名、カラム名、データ型、NotNull、デフォルトなど
インデックス定義
検索の処理速度を早めるために行うもの。
まとめ
データベース設計の大まかな流れを記載しました。
論理設計→物理設計の流れで開発が行われているのが、なんとなく理解できたので
これから実際にデータテーブルの構築の学習を進めたいと思います。
データテーブルの構築の学習の中でSQLの知識も必要とわかったので、並行して SQLも学習も進めていく予定です。