はじめに
最近、業務でテーブル設計を任せてもらう機会がありました。
ただ、新規サービスのテーブルを1から設計するのは初めてで、「どう進めたらいいんだっけ?」と頭が真っ白に。
そんな中、先輩エンジニアに相談して、進め方のポイントを色々と教えてもらいました。
このドキュメントは、その内容を自分なりに整理したメモです。
※この記事は「要件定義フェーズが終わっていて、基本設計フェーズからアサインされた」ケースを想定しています。
1. システムの仕様を理解する
ゴール
- 各画面の仕様をざっくり8割くらい理解している状態を目指す(もちろん理想ではありますが)。
やること
以下の資料を読み込む、または実際の画面を見ながら仕様を確認する:
-
画面一覧
-
機能一覧
-
画面モックアップ
-
その他関連資料
ポイント
仕様に関する疑問はこの段階でできるだけ潰す。不明点は関係者にすぐ確認する。
- この画面のこの要素って何のためにある?
- 登録や更新のフローはどうなっている?
- 入力項目や出力項目の意味は?
2. エンティティを洗い出す
ゴール
- システムで扱う「もの(エンティティ)」を書き出して整理する。
エンティティ(Entity)とは、データベースやデータモデル内で管理・識別される「対象(オブジェクト)」を指します
エンティティは以下のような具体的な対象を表すことができます。
物理的な対象(例:顧客、商品、店舗)
抽象的な概念(例:注文、契約、売上)
イベントや取引(例:支払い、予約、ログイン履歴)
やること
-
各画面に登場する「もの」を書き出す
例:顧客一覧画面 → 顧客
例:書類一覧画面 → 書類 -
機能を実現するために必要な「データのかたまり(=エンティティ)」を洗い出す
-
各エンティティが持つ属性(カラム候補)を洗い出す
例:顧客というエンティティなら「名前」「住所」「性別」「年齢」など
ポイント
自分はスプレッドシートに「画面名」「出てくる要素」「必要なエンティティ」「属性候補」などを整理することで、視覚的に全体を把握しやすくしています。
3. エンティティ同士の関連性を確認する
ゴール
- エンティティの関係性を整理し、ER図を作成する。
やること
各エンティティの間にどんな関係があるかを見極める:
-
1対多
例:1つの会社に複数のユーザーが所属 -
1対1
例:1ユーザーに1つの詳細情報が紐づく場合 -
多対多
例:1人のユーザーが複数のプロジェクトに参加、プロジェクトにも複数ユーザーが参加
4. テーブル設計書に落とし込む
ゴール
- 実際のテーブル定義(設計書)を作成する。
やること
各エンティティの属性(カラム)に対して、以下を設定:
-
NULLを許可するか
-
ユニーク制約が必要か
-
デフォルト値は?
-
主キー(PK)はどれか?
-
外部キー(FK)は必要か?
-
オートインクリメントは必要か?
例
- usersテーブル
論理名 | 物理名 | データ型 | サイズ | PK | NULL | DEFAULT | UNIQUE | FK | AUTO_INCREMENT |
---|---|---|---|---|---|---|---|---|---|
ユーザーID | id | BIGINTEGER | - | ○ | × | - | ○ | × | × |
名前 | name | VARCHAR | 255 | x | × | - | x | × | × |
メールアドレス | VARCHAR | 255 | x | × | - | ○ | × | × |
※設計書のフォーマットはプロジェクトに合わせる。
おわりに
今回まとめた進め方は、あくまで自分が初めてテーブル設計に取り組んだときの学びを整理したものです。
プロジェクトやチームによってやり方は変わるかもしれませんが、「最初にどこから手をつければいいか」で迷っている方の参考になれば嬉しいです。
参考文献