設計 #3
Lunatic1998 さんが約1年前に更新
### DB設計
#### 目的
* アプリケーションを開発する上で、データベースにあらゆるデータを格納するが、最適な形でデータを保存することが開発効率とパフォーマンスに影響する。
#### 概要
* 概念設計
* データベースの目的・要件を決定する
* 必要な情報を整理してエンティティを抽出する
* ER図( Entity Relationship Diagram)を作成する
* 論理設計
* 正規化をおこなう
* 物理設計
* データ型を決定
* 設計を確認・調整する
#### DB設計に必要な四大要素
* エンティティ:データベース設計の対象業務において、管理すべき情報のこと(テーブル名に直結)
* 属性:エンティティに従属する項目のこと(カラム名に直結)
* リレーション:結び付きのあるエンティティ同士を関連させるものを関係
* 多重度:関連のあるエンティティ同士の相対的な位置付け(一対多とか)
#### DB設計の観点
* 構築するシステムの要件・仕様を理解しているか
* 仕様書から見えにくい箇所の想像ができるか
* 正規化がなされているか
* 将来性が考えられているか
#### テーブルの洗い出し
- 手順書テーブル
- ユーザーテーブル
- id
- メールアドレス
- 名前
- セッションテーブル
- user_id
- 期限日
- 作成日
- トークン
- 手順書とユーザーを紐づけるテーブル
- 手順ブロックテーブル
#### カラムの洗い出し
##### user_table
- 手順書を扱うユーザーを管理するテーブル
| id(uuid) | email(string) | subscriber(string) |
| ---- | ---- | ---- | ---- | ---- | ---- |
| wrrg35g | aaa@gmail.com | aaaking |
##### session_table
- ユーザーログインのセッションを管理するテーブル
| token | id(uuid) | expired | issued |
| ---- | ---- | ---- | ---- | ---- | ---- |
| cssvvwegoookqke| wrrg35g | 2023/12/01 | 2023/08/01 |
##### operation_table
- 手順書を管理するテーブル
| id(uuid) | title(string) | date(datetime) | block(uuid) | tag(list[string]) | status(tf true=close) | user(uuid) |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| wf23n2 | DB移行 | 2007/01/12 |2erfrge | mysql | true | wrrg35g |
| g3kmge | v1.0リリース | 2007/01/13 | ef43gm | release | false | wrrg35g |
##### block_id
- 手順書内のコマンド群を管理するテーブル
| id | title | command | operation_id | status |
| ---- | ---- | ---- | ---- | ---- |
| 2erfrge | バックアップ | ~~~~~ | 1 | true |
| ef43gm | 切り戻し | ~~~~ | 1 | false |
#### 参考
* https://qiita.com/ryota_i/items/294281b57cc9783bf2c1
* https://hibiki.dreamarts.co.jp/smartdb/learning/le-sp211202-3/