データベース設計をしよう @TECH CAMP #15
どうも、とだです。今日はデータベース設計について簡単にまとめたいと思います。
データベース設計とは
サービスやシステムを開発する際に、まずやるべきこととして、扱うデータをどのように管理するかを決める必要があります。この作業がデータベース設計となります。データベース設計をしっかりと行うことで、サービスが発展して複雑になった場合でも、より効率的かつ簡易的にデータの操作を行うことができます。すごい大事な作業であることがわかります。
なぜデータベース設計が必要なのか
ほとんどの場合、サービスというのはデータベースを持っています。このnoteというサービスも、クリエイターのユーザー情報や、投稿した記事や写真のデータ、売上記録や閲覧記録など、様々なデータがデータベースで保管、管理されているはずです。サービスのプログラムを書く際に、これらデータやデータ同士の関係性(どのクリエイターがどの記事を書いた、など)をあらかじめ決めておかなければいけません。なぜなら、プログラムの主な役割はデータを操作することだからです。データベース設計を行うことで、データ同士の関係性を明確にするだけでなく効率のよいデータ操作が可能になります。
いつデータベース設計を行うのか
先ほども述べましたが、サービスやシステムの開発の最初の段階で行います。プログラムを書き始めるよりも前にデータベースの設計は行っておかないといけないんですね。
データベース設計の基礎知識
データベース設計は基本的には現実世界の要素をデータに落としこむ作業です。現実世界の要素とは、例えば我々のような顧客(ユーザー)です。顧客をデータベースで管理するには「顧客という概念(エンティティ)」「一人ひとりの顧客の持つ情報(属性)」「顧客と他の情報の関係性(リレーション)」を決める必要があります。
データベースを構成する要素
データベースを構成する要素は以下の3つです。
1. サービスで扱う概念(エンティティ)
2. エンティティの属性
3. エンティティ同士の関係性(リレーション)
1. サービスで扱う概念(エンティティ)
サービスで扱うデータを定義します。データベース設計ではこのデータをエンティティと言います。
エンティティとは、サービスの中で管理する必要のある概念、情報を指します。例えば、このnoteというサービスでは「ユーザー」や「投稿記事」、「コメント」などの情報を管理する必要があります。これらの情報がエンティティにあたります。
2. エンティティの属性
エンティティは属性を持ちます。属性とは、エンティティが個別に持つ情報のことです。ユーザーというエンティティでは「名前」「メールアドレス」「パスワード」「プロフィール写真」などが属性に当たります。投稿記事というエンティティでは「本文」「スキの数」「投稿時間」「投稿した写真」などです。これらを踏まえると、エンティティはサービスで扱う情報を大きく捉えたもの、大枠であり、属性はエンティティそれぞれが実際に持つ情報、具体的なものと言えます。
3. エンティティ同士の関係性(リレーション)
エンティティとエンティティの間に関係性がある場合があります。これをリレーションといいます。大事なことなのでもう一度言うと、リレーションとは、エンティティとエンティティとの間に存在する関係性のことです。例えばこのnoteでは投稿記事と、その記事を投稿したユーザーの間には関連性があります。
データベース設計の手順
データベース設計の手順のうち、ほとんどの場合で必須となる手順は以下の4つです。
1. データベースで管理するデータ(エンティティ)を決める
2. それぞれのデータの持つ属性を決める
3. エンティティ同士の関係性を決める(リレーション)
4. データを実際にデータベースのテーブルとして定義する
1. データベースで管理するデータ(エンティティ)を決める
まずは、作成するサービスで管理するデータを決めます。この作業はエンティティを決定することと同義になります。
noteを例として考えてみると、大きく分けてユーザー(クリエイター)と投稿した記事と2つのエンティティが必要であることが分かります。
2. それぞれのデータの持つ属性を決める
エンティティが決定したら次に属性を決定します。属性とはエンティティがそれぞれ持つデータの事です。先ほどにも挙げたように、ユーザーに持たせる属性は名前、アドレス、パスワードなどがあげられ、投稿した記事に持たせる属性は、本文、スキの数、投稿時間などがあげられます。
3. エンティティ同士の関係性を決める(リレーション)
エンティティ同士の関連性を決定します。記事には必ず投稿したユーザーが存在します。そこでユーザーと記事との間にリレーションを設定することで2つのエンティティ同士に関係性を持たせます。もちろん他のエンティティと関係のない独立したエンティティも存在します。
4.データを実際にデータベースのテーブルとして定義する
最後に1〜3の手順を元に実際にテーブルを作成することになります。エンティティはテーブルに相当し、属性はテーブルが持つカラムに相当します。
終わりに
今回、自分が新たなアプリケーションを開発し始めるため、備忘録としてデータベースの設計についてまとめました。結構重要な作業なので、チームメンバーとよく話し合いながらやるもよし、個人でやるなら時間をとって紙に書きながらなど慎重にやりたい作業です。次回はより具体的に、キーと呼ばれる特殊なデータや、制約、インデックスについてまとめたいと思います。
この記事が気に入ったらサポートをしてみませんか?