Yuri's Blog
配信者のイラスト

ロードマップ形式のTodoアプリを作る(設計編 Part.2)

公開日:2025年3月17日

最終更新日:2025年3月17日

PostgreSQL

こんにちは、Yu_riです。
今回は前回記載できなかったDB設計周りについてです。

今回開発するロードマップ形式のTodoアプリのER図は↓のような形で考えています。
使用するDBMSはPostgreSQLにする予定です。

上記ER図のテーブルごとに設計内容を記載していきます。
※idやcreated_at、updated_at、deleted_atはgorm.Modelで生成したかったが、idはNano IDを利用したかったので今回はgorm.Modelの使用はなしとします。
※実装の中で変更がある場合は都度マイグレーションしていきます。

users テーブル

カラム名

データ型

制約

id

char(21) ※NanoIDで生成

PRIMARY KEY

created_at

timestamp

updated_at

timestamp

deleted_at

timestamp

name

text

NOT NULL

email

text

NOT NULL
UNIQUE

password

text

NOT NULL

roadmaps テーブル

カラム名

データ型

制約

id

char(21) ※NanoIDで生成

PRIMARY KEY

created_at

timestamp

updated_at

timestamp

deleted_at

timestamp

roadmap_title

text

NOT NULL

user_id

char(21)

NOT NULL
REFERENCES users

flow_edges テーブル

カラム名

データ型

制約

id

char(21) ※NanoIDで生成

PRIMARY KEY

created_at

timestamp

updated_at

timestamp

deleted_at

timestamp

source_id

char(21)

NOT NULL
REFERENCES roadmaps

target_id

char(21)

NOT NULL
REFERENCES roadmaps

roadmap_id

char(21)

NOT NULL
REFERENCES roadmaps

todo_groups テーブル

カラム名

データ型

制約

id

char(21) ※NanoIDで生成

PRIMARY KEY

created_at

timestamp

updated_at

timestamp

deleted_at

timestamp

type

text

NOT NULL
※実装の中で不要になる可能性あり

position

jsonb

NOT NULL
※x、yをKeyとするJSONを格納

data

jsonb

NOT NULL
※groupTitle、status、priority、deadlineをKeyとするJSONを格納

roadmap_id

char(21)

NOT NULL
REFERENCES roadmaps

todo_items テーブル

カラム名

データ型

制約

id

char(21) ※NanoIDで生成

PRIMARY KEY

created_at

timestamp

updated_at

timestamp

deleted_at

timestamp

Item_title

text

NOT NULL

is_completed

boolean

todo_group_id

char(21)

NOT NULL
REFERENCES todo_groups

次の記事ではディレクトリ構造について書けたらなと思います。