注意
あらかじめ言っておきますが、筆者は初心者なので、自分なりの解釈でまとめています。「100%信じるぜ!」という気持ちで読まないようお願いします。どうぞよろしく!
参考動画
このシリーズを見て学びました。わかりやすいです!
https://youtu.be/T6g-DLWHscw?si=8Sb1WvfDfw6cphR7
経緯
ポートフォリオ作成のために、献立作成アプリを開発したのですが、初めてのアプリ開発ということもあり、データベースをどのように考えればよいのだろう?と感じて参考動画を見て、設計してみたので備忘録としてまとめてみました。
用語の意味
リレーション
テーブル同士の関係を示すものです。主に次の3種類があります。
1対多(1:n)
多対多(n:n)→ 中間テーブルを作成することで表現
1対1(1:1)
詳しくは、参考動画の「0:22」あたりが参考になります。
作成するアプリ
レシピを複数選ぶと、それに必要な食材が自動で集計され、買い出しリストが作られるようなアプリを想定しています。
手順
結論
横方向に繰り返しがある → 縦に並べよう
縦方向に繰り返しがある → 1:nの別テーブルに切り出そう
0.まずはデータを洗い出そう!
実際にアプリが動く様子を思い浮かべながら、「どんなデータが必要か?」を洗い出していきます。
(あ、これも必要かも?みたいにどんどん出してOKです)
以下のように整理してみました。
1.第一正規形を行う
第一正規は、横方向の繰り返しをなくすことが目標です!
手順0で設定したテーブルは材料、数、単位列が横方向に複数行繰り返されていたので、「材料」「数量」「単位」列を一列ずつにしました
第2正規系を行う
第2正規形は縦方向の繰り返しをなくすことが目標です。
カレー、生姜焼き、ハンバーグなどのレシピが、材料ごとに複数行に分かれていたため、レシピ情報と材料情報を別のテーブルに分けて管理しました。
レシピテーブルと材料テーブルを用意し、recipe_idでリレーションを作りました。
テーブルを作成する
英語にする
id,作成日時、更新日時をつけて、日本語を英語にします
idは主キーになります。
命名規則
- 半角英字、数字、アンダースコア(_)を使う
- テーブル名は複数形、カラム名は単数形が基本
- text1のような雑な名前は避ける
- SQLの予約語(if, null, dateなど)は使わない
型をつける
インデクスを作成する
インデクスとは、検索のキーになるカラムにつけます。主キーや外部キーにはつけません。
NOT NULL制約、ユニークキー制約、外部キー制約をつける
- NOT NULL制約:値が必須であることを保証する
- UNIQUE制約:値が重複しないことを保証する
- 外部キー制約:リレーション先のテーブルに必ず存在することを保証する
感想
はじめてデータ設計をしてみましたが、想像以上に「データの洗い出し」が難しかったです。
とはいえ、形にすることで理解が深まったので、これからもガンガン開発していきます!