見れば行われている処理がイメージできるようなテーブル構造を設計するのが良いと思っている。
このテーブル構造で何が読み取れるか?
user
id | state |
---|---|
1 | active |
2 | active |
3 | disactive |
... | ... |
userはステータスを持っているのはわかる。
データを見るとほとんどactiveでたまにdisactiveがあるように見える。
active, disactiveだけなのかどうかはわからない。
どんなふうに遷移するのかもわからない。
だから、こんなテーブル構造がいいと思っている
user
id | user_state_id |
---|---|
1 | 2 |
2 | 2 |
3 | 3 |
... | ... |
user_state
id | name |
---|---|
1 | preparation |
2 | active |
3 | disactive |
user_state_history
id | user_id | user_state_id | until_at |
---|---|---|---|
1 | 1 | 1 | 2021-03-15 12:00:00 |
2 | 2 | 1 | 2021-03-15 13:00:00 |
3 | 3 | 1 | 2021-03-15 13:00:00 |
3 | 3 | 2 | 2021-03-15 14:00:00 |
... | ... | ... | ... |
先程のテーブルとは違って、userはpreparation, active, disactiveの状態があることがわかる。他にないこともわかる。
stateはpreparation => active => disactive と遷移しているのも分かる。過去どういうstateを辿ったのかもわかる。
コードを見なくてもなんとなくイメージできる。