DB構造の整理を怠ったがために、トラブルった話
出来上がった構造
USER テーブル
- id
- name
- login_id
- password
- deleted
あるべきであった姿
USER テーブル
- id
- name
- deleted
AUTH_INFORMATION テーブル
- user_id
- FOREIGN USER.id
- login_id
- UNIQUE
- password
起こった問題
「別の人がログインしてるんだけど」
- ログインID、パスワードを間違いなく入力している
- 表示されるのは別人の名前
- deletedカラムで論理削除したデータとlogin_idが重複していた
運用回避
- もともと、ユーザではなくシステム担当者がinsertする運用だった
- データ追加前にlogin_idでselectしてチェックする運用に
結論:分けときましょう。
AUTH_INFORMAION にあるデータはすべて有効で、login_idがユニークであれば、Insert時に怒られるのでこんな問題が起こることはなかった。