【webアプリを作る】データベースの考え方・テーブル設計のやり方編

table Webエンジニア

前回の記事「webエンジニアになる為にどんなwebサイト・アプリを作ったらいいか?」の続きになります。まだご覧いただいていない方は先にそちらをどうぞ。

webアプリを作る際にはまずざっくりどんなサイトを作るかを決め、次に以下の手順のような形でやるとやりやすいと思います。

  • 機能設計
  • 画面設計
  • データベース設計

機能設計と画面設計については上記の前回の記事で書いているのでそちら参考にしてください。

今回は続いてデータベース設計についての解説になります。

データベース設計

webアプリとデータベースは切っても切り離せない関係にあります。たとえばアカウント登録があればユーザー情報を登録するユーザーテーブルが必要になるといった形。

そもそもデータベースとは何ぞやというところからは以下の記事を参考にしてみていただければと思います。

data

プログラミングにデータベースが必要な理由【効率的な勉強方法】

2019年8月23日

前回の記事から、必要な機能は以下の二つ。

  • アカウント登録
  • テキスト投稿

ということはユーザーテーブルと、投稿テーブルがあればひとまずはいけそうです。

ユーザーテーブル

必要な項目を考えていきます。まずは登録に必要としていたメールアドレスとパスワード、あとはニックネームといったところですね。

そしてどのテーブルにもつけておいた方が無難な連番のIDと、登録日あたりを項目とします。

【ユーザーテーブル】

  • ユーザーID
  • メールアドレス
  • パスワード
  • ニックネーム
  • 作成日

次にテーブル名や項目名に日本語は使わないので英語にしておきます。

【users】

  • user_id
  • mail
  • password
  • nickname
  • created_at

まぁ自分で作るものなので好きにつけていいと思いますが、一応テーブルや項目名にも従っておいた方が良い命名規則はあるようです。

いきなりは無理なのでおいおい覚えていけばいよいことかと思います。最初はとにかくやってみることの方が大事。

あとは項目には数字型・文字列型・日付型といった形で型を設定する必要があるのですが、ひとまず今は文字列を扱うものは文字列型、日付を扱うものは日付型、IDなど数字を扱うものには数字型を指定するということだけ。

実際にテーブルを作成する際に、型について詳しく記載いたします。

投稿テーブル

誰による投稿なのか、投稿された内容あたりを記録しておけばひとまずOKでしょう。

最初の記事で簡単な画面設計を行いましたが、それらを参考に表示されている項目などを見てみれば、必要な項目を洗い出しやすいですよ。

【投稿テーブル】

  • 投稿ID
  • ユーザーID
  • 投稿内容
  • 作成日

例によって英語化します。

【posts】

  • post_id
  • user_id
  • post_text
  • created_at

post_textという名づけがちょっと微妙な気もしますよね、単純に投稿内容を訳すと「post_content」他にも「post_detail」とかもありですかね、このあたりはお好きにどうぞ。

拡張も考えてみる

基本的には上の二つのテーブルがあればサンプルで考えたサイトは作れてしまうのではないかなと思います。

まだここはさらっと見るだけでいい部分ではありますが、今後機能を拡張してこのテーブル構造を見直す機会が発生した場合の例を考えてみましょう。

食べたものを投稿する、というさいとだったので、その投稿にカテゴリ付けを行えるとします。(本当はタグ付けがいいかなと思いますが一番簡単なカテゴリから入っておきます)

まずはどんなカテゴリを追加するか考えます。

  • ダイエットメニュー
  • おすすめした美味しいお店
  • 安くて多いアイディア料理

このようなカテゴリを追加するとして、次に投稿テーブルにこれらのカテゴリとの関連付けを行うカラム(category_id)を追加します。

【posts】

  • post_id
  • user_id
  • category_id
  • post_text
  • created_at

カテゴリ自体は3つくらいなら力技でも管理できますが、カテゴリのマスタを管理するテーブルも作ってみましょう。

【カテゴリテーブル】

  • カテゴリID
  • カテゴリ名
【categories】

  • category_id
  • category_name

そして中身に以下のようなデータを入れておくわけです。

category_id category_name
1 ダイエットメニュー
2 おすすめした美味しいお店
3 安くて多いアイディア料理

カテゴリの選択リストを作る際などは、このテーブルからリストを取得して一覧表示するようにしておけば、このテーブルにデータを一行入れるだけでwebアプリ上で選択できるリストも自動で増えるという感じです。

あとはカテゴリIDを指定した検索などで利用する形ですが、検索はまた長くなってしまうので別記事で紹介しますね。

まとめ

機能設計と画面設計に続き、テーブル設計も済みましたのでこれで下準備は完了です。

次回からは実際にwebアプリを作り始める工程をご紹介していきますので、引き続きよろしくお願いいたします。