Laravelでブログサイトを作る 02. データベース設計
▲閉じる
目次

おさらい
まとめた要件は、前回を参照。
データベースで管理する情報
親カテゴリ
- ID
- 一意となる値です。「どれのこと?」を特定するために利用します。
- カテゴリ名
- まず必要なのは、カテゴリの名前です。こればっかりは理由も何も、無ければ話にならないものなので、割愛します。
- 表示順
- 一覧表示する上で必要な順序を保有する必要があります。
- created_at、updated_at、deleted_at
- LaravelでEloquent ORMを使用する際、順に作成日時、更新日時、削除日時を格納するために作成します。
- このうち、削除日時は、「日時が入っていたら削除」と、論理削除のために使用します。
子カテゴリ
- ID、カテゴリ名、表示順、created_at、updated_at、deleted_at
- 親カテゴリ同様に、保有する必要がある情報です。
- 親カテゴリID
- 子カテゴリには、親に当たる親カテゴリが存在する構成になります。
- この場合は、親カテゴリのIDと同じ値を格納します。
記事
- ID、created_at、updated_at、deleted_at
- この辺りは、親子カテゴリと同様にシステム的に必要な情報です。
- 記事タイトル
- 記事のタイトルですが、データベースでは文字数の制限をつけたりはしません。
- ○文字まで、という制限をデータベース側でやってしまうと、変更する時の手間が大きくなってしまうからです。
- 記事本文
- HTMLなどのタグも含めて保存します
- 親カテゴリID
- 記事と親カテゴリは1対1の関係にするので、記事情報に親カテゴリを保有させます。
- (記事に対して複数関連付けるものは子カテゴリ)
記事と子カテゴリを関連付けるテーブル
前述しましたように、1記事に対して複数の子カテゴリが関連付けられるように、記事IDと子カテゴリIDを記録するテーブルを用意します。
まとめ
親カテゴリ(ParentCategory)
| カラム名 | データ型 | index | 備考 |
|---|---|---|---|
| id | int | ─ | 主キー |
| name | text | × | カテゴリ名 |
| number | int | ○ | 表示順 |
| created_at | timestamp | × | 作成日時 |
| updated_at | timestamp | × | 更新日時 |
| deleted_at | timestamp | × | 削除日時 |
※表示順はORDER BYで指定するため、インデックスを作成する。
子カテゴリ(ChildCategory)
| カラム名 | データ型 | index | 備考 |
|---|---|---|---|
| id | int | ─ | 主キー |
| name | text | × | カテゴリ名 |
| parent | int | × | 親カテゴリID |
| number | int | ○ | 表示順 |
| created_at | timestamp | × | 作成日時 |
| updated_at | timestamp | × | 更新日時 |
| deleted_at | timestamp | × | 削除日時 |
※表示順はORDER BYで指定するため、インデックスを作成する。
記事(article)
| カラム名 | データ型 | index | 備考 |
|---|---|---|---|
| id | int | ─ | 主キー |
| title | text | × | 記事タイトル |
| body | text | × | 本文 |
| parent | int | ○ | 親カテゴリID |
| created_at | timestamp | × | 作成日時 |
| updated_at | timestamp | × | 更新日時 |
| deleted_at | timestamp | × | 削除日時 |
※親カテゴリを指定し、属する記事を探すケースがあるので、親カテゴリIDにインデックスを作成する。
記事-子カテゴリ(articleChild)
| カラム名 | データ型 | index | 備考 |
|---|---|---|---|
| id | int | ─ | 主キー |
| article | int | ○ | 記事ID |
| child | int | ○ | 子カテゴリID |
| created_at | timestamp | × | 作成日時 |
| updated_at | timestamp | × | 更新日時 |
| deleted_at | timestamp | × | 削除日時 |
※記事が持つ子カテゴリを取得するケースが考えられるので、記事IDにインデックスを作成する。
※子カテゴリを指定し、属する記事を探すケースがあるので、子カテゴリIDにインデックスを作成する。
2022-03-28 09:00:00
