【3】LaravelでPortfolioサイトをCMS付きで作るときのメモ【DB設計編】

こんにちは!かたつむり(@Katatumuri_nyan)です!

主催している勉強会で、各自ポートフォリオとwebアプリを作ることになりました(*’▽’)
そこで、みんなが使えるように、CMS付のポートフォリオサイトを作ってみることに♡

入力できる項目はシンプルですが、はじめて作るCMSにはちょうどいいかなと思います。

Herokuにアップしたら良い感じに使えるように作っていきます♪

Forkしたら誰でも使えるようにする予定なので、お楽しみに!

GitHubでソースコードを管理しています!

最初から見る↓
【1】LaravelでPortfolioサイトをCMS付きで作るときのメモ【下調べ編】【1】LaravelでPortfolioサイトをCMS付きで作るときのメモ【下調べ編】

前回を見る↓
【2】LaravelでPortfolioサイトをCMS付きで作るときのメモ【要件定義編】【2】LaravelでPortfolioサイトをCMS付きで作るときのメモ【要件定義編】

DBの設計案

DBテーブル一覧
まず、必要だと思うテーブルを書き出してみました
どこでどんなテーブルが必要になるかを考えました。

テーブル
– profile
– contacts
– works
– works_attribute
– works_attribute_class
– language
– tool
– db
– infrastructure
– middleware
– environment

worksのテーブルをどうするのかというところで結構悩みました。
最初のリリースの際には、制作物(works)の名前と説明文だけ載せる予定にしています。

要件追加

  • worksで言語や技術を登録する時に、プルダウンで選べるようにする
  • 無い場合は、works登録画面から新規登録できる
    (リリース時期は要検討)

テーマ変更のためのDB

要件に、ポートフォリオサイトのテーマカラー変更を挙げていました。
参考にしているWordPressでは、現在どのテーマを選択しているかは、といった情報は、どこに入れているのか気になりました。
DBに保存してあるとしたら、DBからとってきているソースがあると思ったので、確認してみました。

が、しかし、、、
テーマカラーに関する$_wp_admin_css_colorsというグローバル変数が、どこで定義されているのか分からず、、、

そこで、DB見てみたところ、それらしきものがありました。

WordPressのDB

とりあえず、DBには保存されているということなので、theme_colorテーブルを追加することにしました。

追加したテーブル

user_attributeテーブルの追加

profileという名前のテーブルをadminに変更して、属性をadmin_attributeテーブルで追加できるようにします。

admin_attributeテーブルにprofileの詳細やテーマカラーなどのユーザーに付随する情報を入れることにしました。

DB設計書の作成

DB案が固まってきたので、DB設計書を作成します。
型や長さの定義から、PRIMARY KEYやFOREIGN KEYなどの定義もしていきます。

今回は、Herokuをつくかう予定なので、PostgreSQLのデータ型で定義します。

また、attribute周りのテーブルの定義が間違っていたので修正しました。
テーブル名やカラム名など、ところどころ修正かけてます。

設計書はリンク貼っておきます:【PortfolioCMS】DB設計書

気を付けた事

  • 無駄なテーブルを作らない
  • 無理に1つのテーブルにしない
  • 名前を適切につける

悩んだところ

attributeテーブルを作るのが適切なのか悩みました。
attributeテーブルって、柔軟に属性を追加できるので、属性を追加したいテーブル(例えばworks)にカラムを追加しなくても色々な属性を追加できるのが魅力です。
ただ、属性を追加する事がそんなにあるのか…?想定が分からず困りました。

一家?に一冊「SQLアンチパターン」

今回は、attributeテーブルで対応しましたが、ベストプラクティスだったかは不明。

まとめ

要件追加されたのでまとめておきます。

### できること
- ポートフォリオサイトを作れる
- プロフィールをCMSから登録・編集
- 作品一覧をCMSから登録・編集
- contact情報をCMSから登録・編集
- テーマカラーをCSMから変更

### 環境
- dockerで簡単に環境構築
- Herokuで簡単にデプロイできる

### 追加機能としてやりたいこと
- 作品の詳細説明を書けるページ(CMSから登録・編集)
- キャリア等のコンテンツブロックを入力・並べ替えて編集
- worksで言語や技術を登録する時に、プルダウンで選べるようにする
- 無い場合は、works登録画面から新規登録できる

次回は、モジュール設計を行います。
↓続き
【4】LaravelでPortfolioサイトをCMS付きで作るときのメモ【モジュール設計】【4】LaravelでPortfolioサイトをCMS付きで作るときのメモ【モジュール設計】

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です