1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者がデータベース設計を考えたときのこと

Posted at

注意

あらかじめ言っておきますが、筆者は初心者なので、自分なりの解釈でまとめています。「100%信じるぜ!」という気持ちで読まないようお願いします。どうぞよろしく!

参考動画

このシリーズを見て学びました。わかりやすいです!
https://youtu.be/T6g-DLWHscw?si=8Sb1WvfDfw6cphR7

経緯

ポートフォリオ作成のために、献立作成アプリを開発したのですが、初めてのアプリ開発ということもあり、データベースをどのように考えればよいのだろう?と感じて参考動画を見て、設計してみたので備忘録としてまとめてみました。

用語の意味

リレーション

テーブル同士の関係を示すものです。主に次の3種類があります。
1対多(1:n)
多対多(n:n)→ 中間テーブルを作成することで表現
1対1(1:1)
詳しくは、参考動画の「0:22」あたりが参考になります。

作成するアプリ

レシピを複数選ぶと、それに必要な食材が自動で集計され、買い出しリストが作られるようなアプリを想定しています。

手順

結論

横方向に繰り返しがある → 縦に並べよう

縦方向に繰り返しがある → 1:nの別テーブルに切り出そう

0.まずはデータを洗い出そう!

実際にアプリが動く様子を思い浮かべながら、「どんなデータが必要か?」を洗い出していきます。
(あ、これも必要かも?みたいにどんどん出してOKです)
以下のように整理してみました。
スクリーンショット 2025-06-06 6.15.40.png

1.第一正規形を行う

第一正規は、横方向の繰り返しをなくすことが目標です!
手順0で設定したテーブルは材料、数、単位列が横方向に複数行繰り返されていたので、「材料」「数量」「単位」列を一列ずつにしました

スクリーンショット 2025-06-06 6.17.56.png

第2正規系を行う

第2正規形は縦方向の繰り返しをなくすことが目標です。
カレー、生姜焼き、ハンバーグなどのレシピが、材料ごとに複数行に分かれていたため、レシピ情報と材料情報を別のテーブルに分けて管理しました。
レシピテーブルと材料テーブルを用意し、recipe_idでリレーションを作りました。

【recipes】
スクリーンショット 2025-06-06 6.23.17.png

【ingredients】
スクリーンショット 2025-06-06 6.23.16.png

テーブルを作成する

第2正規形まで行ったら以下のようなテーブル設計ができました
スクリーンショット 2025-06-06 7.19.43.png

英語にする

id,作成日時、更新日時をつけて、日本語を英語にします
スクリーンショット 2025-06-06 7.29.25.png
idは主キーになります。

命名規則

  • 半角英字、数字、アンダースコア(_)を使う
  • テーブル名は複数形、カラム名は単数形が基本
  • text1のような雑な名前は避ける
  • SQLの予約語(if, null, dateなど)は使わない

型をつける

スクリーンショット 2025-06-06 7.43.16.png

インデクスを作成する

インデクスとは、検索のキーになるカラムにつけます。主キーや外部キーにはつけません。

NOT NULL制約、ユニークキー制約、外部キー制約をつける

  • NOT NULL制約:値が必須であることを保証する
  • UNIQUE制約:値が重複しないことを保証する
  • 外部キー制約:リレーション先のテーブルに必ず存在することを保証する

感想

はじめてデータ設計をしてみましたが、想像以上に「データの洗い出し」が難しかったです。
とはいえ、形にすることで理解が深まったので、これからもガンガン開発していきます!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?