hiyoko-programingの日記

プログラミングを勉強したてのひよっ子。   エンジニア目指して勉強中。

データベース設計の概要

データベース設計とは

データベースの設計とは、作成するサービスやシステムに必要な情報をどのようにデータベースで管理するかを決める作業である。データベース設計をしっかりと行うことで、サービスが複雑になった場合でもより効率的かつ簡易的にデータの操作を行うことができる。

データベース設計はなぜ必要なのか

ほとんどの場合、サービスはデータベースを持つ。データベースには顧客の情報や商品の情報など様々なデータが保管される。サービスのプログラムを書く際に、こうしたデータやデータ同士の関係性(どの顧客がどの商品を買ったかなど)をあらかじめ決めておかなければいけない。なぜならプログラムはそれらのデータを操作することが主な役割だからである。
データベース設計を行うことで、データ同士の関係性を明確にするだけでなく効率のよいデータ操作を可能にする。

データベース設計はいつ行うのか

データベース設計はサービスやシステムの開発の最初の段階で行う。プログラムを書き始めるよりも前にデータベースの設計は行っておく。

データベース設計の基礎知識

データベース設計は基本的には現実世界の要素をデータに落としこむ作業。現実世界の要素とは例えば顧客(ユーザー)である。顧客をデータベースで管理するには「顧客という概念(エンティティ)」「一人ひとりの顧客の持つ情報(属性)」「顧客と他の情報の関係性(リレーション)」を決める必要がある。

データベースを構成する要素

データベースを構成する要素は以下の3つ。

  • サービスで扱う概念(エンティティ)
  • エンティティの属性
  • エンティティ同士の関係性(リレーション)

サービスで扱う概念(エンティティ)

サービスで扱うデータを定義する。データベース設計ではこのデータをエンティティと言う。

 エンティティ

エンティティとは、サービスの中で管理する必要のある概念(情報)を指す。例えば、SNSなどのサービスでは「ユーザー」や「投稿内容」、「コメント」などの情報を管理する必要がある。これらの情報がエンティティにあたる。

https://tech-master.s3.amazonaws.com/uploads/curriculums//8fecb0620a0deca08a7fa6ed0dabf1e9.png

エンティティの属性

エンティティは属性を持つ。映画というエンティティであれば、タイトルや説明、公開日、監督などが属性である。

 エンティティの属性

属性とは、エンティティが個別に持つ情報である。ユーザーというエンティティでは、「名前」「アドレス」「パスワード」「プロフィール写真」が属性にあたる。

https://tech-master.s3.amazonaws.com/uploads/curriculums//e0ae991115ed305b6e2ec563171f28b4.png

これらを踏まえると、エンティティはサービスで扱う情報を大きく捉えたものであり、属性はエンティティそれぞれが実際に持つ情報と言える。

エンティティと属性の例

エンティティ 属性
ユーザー 名前、アドレス、パスワード、プロフィール写真 etc
投稿内容(ツイートなど) 投稿したテキスト、投稿した写真、イイネ数 etc

エンティティ同士の関係性(リレーション)

エンティティとエンティティの間に関係性がある場合がある。これをリレーションという。Twitterではツイートとツイートを投稿したユーザーの間には関連性がある。

 リレーション

リレーションとは、エンティティとエンティティとの間に存在する関係性のこと。例えば、映画には、その映画を撮った監督がいる。こういった場合、映画と監督の2つのエンティティには関係性がある。

https://tech-master.s3.amazonaws.com/uploads/curriculums//0703a0796f20af6f2f287aae110c4e78.png

データベース設計の手順

データベース設計の手順のうち、ほとんどの場合で必須となる手順は以下の4つ。

  1. データベースで管理するデータ(エンティティ)を決める
  2. それぞれのデータの持つ属性を決める
  3. エンティティ同士の関係性を決める(リレーション)
  4. データを実際にデータベースのテーブルとして定義する

1. データベースで管理するデータ(エンティティ)を決める

まずは、作成するサービスで管理するデータを決める。この作業はエンティティを決定することと同義。
Twitterを例として考えてみると、大きく分けてユーザーと投稿したツイートと2つのエンティティが必要であることが分かる。

2. それぞれのデータの持つ属性を決める

エンティティが決定したら次に属性を決定する。属性とはエンティティがそれぞれ持つデータの事。ユーザーに持たせる属性は名前、アドレス、パスワードなどがあげられ、ツイートに持たせる属性は、本文、イイネ数、投稿時間などがあげられる。

3. エンティティ同士の関係性を決める(リレーション)

エンティティ同士の関連性を決定する。ツイートには必ず投稿したユーザーが存在する。そこでユーザーとツイートとの間にリレーションを設定することで2つのエンティティ同士に関係性を持たせる。もちろん他のエンティティと関係のない独立したエンティティも存在する。

4.データを実際にデータベースのテーブルとして定義する

最後に1〜3の手順を元に実際にテーブルを作成する。エンティティはテーブルに相当し、属性はテーブルが持つカラムに相当する。

まとめ

  • データベース設計はサービスでどのようなデータを用い、どうやって管理するかを決める手順
  • データベース設計を開発の前に行うことで、より効率的なデータ管理を行うことができるようになる
  • エンティティとはユーザーやコメント、投稿といったサービスで扱う概念
  • エンティティは属性を持っている(ユーザーなら名前やメールアドレスなど)
  • エンティティとエンティティの間には関連性の場合があり、関連性をリレーションという
  • エンティティはデータベースにおけるテーブルに相当する
  • エンティティの属性はデータベースにおけるカラムに相当する