現在、転職先の企業へのアピールポイントになるポートフォリオ作成(オリジナルアプリ開発)をしています。
私は、タスク管理ツールの完成を目指しています。
今回は、DB設計についてです。
##エンティティを洗い出す
エンティティ(実体)とは、ある共通項を持ったデータの集合体のこと。
「システムに必要なエンティティ(=データ)は何か?」を洗い出していきます。
###機能
- サインアップ・サインイン機能
- リスト機能
- カード機能
これらの機能に必要なテーブルを以下のように抽出します。
###必要なテーブル
- usersテーブル
- listsテーブル
- cardsテーブル
これで必要なテーブルは決まりました。
次はそれぞれのテーブルに必要なカラムを決めるために、テーブルごとに管理する情報を考えていきます。
##テーブルごとに管理する情報
###usersテーブル
- ニックネーム
- メールアドレス
- パスワード
###listsテーブル
- リストタイトル
- user情報(外部キー)
###cardsテーブル
- カードタイトル
- カードの詳細
- list情報(外部キー)
全ての情報の関係性を考えます。
全ての情報をの関係を洗い出したら、テーブル設計を行います。
テーブル設計には、ER図を描きます。
Railsプロジェクト新規作成してから行います。
下の記事を参考にしてみてください!
##ER図
ER図とは、データベース設計における代表的な設計図のことです。
ER図のEはエンティティ(Entity)の略で、Rはリレーションシップ(Relationship)の略です。##READMEに設計情報を記述
README(リードミー)とは、ソフトウェアの仕様、規格、インストール方法などを文書化したアプリケーションの説明書のようなファイルです。
特徴として、rails newを実行した際に自動生成され、マークダウンと呼ばれる記述方法で記載されています。今回、READMEには以下の内容を記述します。
- テーブル名
- カラム名
- カラムの型
- カラムのオプション(null false制約など)
- アソシエーション
# テーブル設計
## usersテーブル
| Column | Type | Options |
| ------------------ | ------ | ----------- |
| nickname | string | null: false |
| email | string | null: false |
| encrypted_password | string | null: false |
### Association
- has_many :lists
## listsテーブル
| Column | Type | Options |
| ---------- | ---------- | ------------------------------ |
| list_title | string | null: false |
| user | references | null: false, foreign_key: true |
### Association
- has_many :cards
- belongs_to :user
## cardsテーブル
| Column | Type | Options |
| ---------- | ---------- | ------------------------------ |
| card_title | string | null: false |
| memo | text | null: false |
| prototype | references | null: false, foreign_key: true |
### Association
- belongs_to :list
マークダウンを用いて記述すると、上記は以下の画像のように見た目が整った形で反映されます。
マークダウンが反映されているかどうかはGitHub等で確認します。
テーブル設計
usersテーブル
Column | Type | Options |
---|---|---|
nickname | string | null: false |
string | null: false | |
encrypted_password | string | null: false |
Association
- has_many :lists
listsテーブル
Column | Type | Options |
---|---|---|
list_title | string | null: false |
user | references | null: false, foreign_key: true |
Association
- has_many :cards
- belongs_to :user
cardsテーブル
Column | Type | Options |
---|---|---|
card_title | string | null: false |
memo | text | null: false |
prototype | references | null: false, foreign_key: true |
Association
- belongs_to :list
テーブル設計については以上です。
ER図の描き方やREADMEの記述方法については今回触れませんでしたが、今後、ご紹介できればと思っています!!
##参考
https://eh-career.com/engineerhub/entry/2018/06/22/110000