はじめに
DB設計をする時にどのような粒度でテーブルを作っていけばいいかわからなかった時、先輩から教えてもらったことがとても役に立ったので共有します。なお、超シンプルにまとめてますので詳細は各自でお願いします🙇
全体のDB設計
リストデータ(親) のテーブルと、詳細データ(子) のテーブルがある。
例えば「雑学を極めるための練習問題」のようなアプリがあるとした場合、
・リストテーブル(親)... 雑学を学ぶためのレッスン一覧を格納する「レッスン一覧テーブル」
・詳細データ(子)... レッスン単体ごとに内包されたタスク一覧を格納する「タスク一覧テーブル」
というような親子関係でテーブル構成を作る、という概念です。
これは雑学を極めるためのアプリなのでレッスンが用意されており、その中にレッスンをクリアするためのタスク(例えば勉強時間を1時間以上など)が内包されているイメージです。タスクをクリアすることでレッスンもクリアしたと判定される仕様ですね。
テーブルの分け方
テーブルを分ける時の目安として マスターデータ(固定) と変動データ(動的) があります。
さっきのレッスンテーブルを例に考えてみます。
・マスターデータ(固定)... これは先程の「レッスン一覧テーブル」にあたります
・変動データ(動的)... これはレッスンの進捗状況を管理するため「レッスン進捗管理テーブル」のような動的に変化する値を扱うテーブルを指します。
「レッスン進捗管理テーブル」はレッスン一覧から、どれだけのレッスンをクリアしているかを表すため、変動データとなります。
つまり、作成後にテーブル内のカラム(フィールド)の値が変わるものを扱う場合はマスターデータを扱うテーブルと分離すると良いでしょう
終わりに
ありがとうございました。走り書きした記事なので修正、補足等指摘していただけると助かります🙇