こんなテーブル、ありませんか?
ユーザー
ユーザーID : bigint «PK»
⽒名 : text
⽒名カナ : text
郵便番号 : text
住所 : text
電話番号 : text
TwitterID : text
Twitter
トークン : text
削除フラグ : boolean
4
Slide 5
Slide 5 text
こんなテーブル、ありませんか?
ユーザー
ユーザーID : bigint «PK»
⽒名 : text
⽒名カナ : text
郵便番号 : text
住所 : text
電話番号 : text
TwitterID : text
Twitter
トークン : text
削除フラグ : boolean
???「シンプルじゃないんよ」
5
Slide 6
Slide 6 text
シンプルじゃないとは
シンプルじゃないテーブル=複数の責務を持つテーブル
複数の責務を持っていると、データの整合性維持やスキーマの変
更が難しくなる
(
詳しくはアジャイル開発とデータベース設計 by soudai
を参照)
6
情報の生存期間(列方向)にズレがある例
ユーザー
ユーザーID : bigint «PK»
⽒名 : text
⽒名カナ : text
郵便番号 : text
住所 : text
電話番号 : text
TwitterID : text
Twitter
トークン : text
削除フラグ : boolean
ユーザー登録のタイミングでは住所なしだって?
そのためにnullable
?
電話番号って追加されたりしない?
9
Slide 10
Slide 10 text
情報の生存期間(行方向)にズレがある例
ユーザー
ユーザーID : bigint «PK»
⽒名 : text
⽒名カナ : text
郵便番号 : text
住所 : text
電話番号 : text
TwitterID : text
Twitter
トークン : text
削除フラグ : boolean
列としては削除フラグはいつも存在していて生存期間はずれてなさそ
うだけど...
?
10
構造の生存期間のズレ
ユーザー
ユーザーID : bigint «PK»
⽒名 : text
⽒名カナ : text
郵便番号 : text
住所 : text
電話番号 : text
TwitterID : text
Twitter
トークン : text
削除フラグ : boolean
外部サービスってずっと使いますか?生きてますか?
12
Slide 13
Slide 13 text
シンプルじゃないテーブルを見つけたらどうし
たら?
俺達の戦いはまだ始まったばかりだ!
13
Slide 14
Slide 14 text
参考資料
アジャイル開発とデータベース設計 -
変化に対応するシンプルな実
装のために必要なこと by sodai
https://agilejourney.uzabase.com/entry/2022/07/28/103000
イミュータブルデータモデル by kawasima
https://scrapbox.io/kawasima/
イミュータブルデータモデル
14