Slide 1

Slide 1 text

シンプルじゃないテーブルの見つけ方 @_sunnyone / 2024-06-26 at PHP 勉強会 1

Slide 2

Slide 2 text

今日お話すること こんな人向けにいけてないかテーブルどうかを知るためのヒントを お伝えします。 列たくさんあるんだけど、正しいのかな? 削除フラグダメって言うけど、boolean の列ってダメなの? Eloquent やDoctrine でなんとなくDB 作ってるけど、大丈夫か心 配 2

Slide 3

Slide 3 text

自己紹介 Yoichi Imai (@_sunnyone) / Web アプリケーションエンジニア アプリケーション層(L7) プレゼンテーション層(L6) セッション層(L5) トランスポート層(L4) ネットワーク層(L3) データリンク層(L2) 物理層(L1) ⼤学⽣アルバイト / PHP プログラマ SIer / IT インフラエンジニア スタートアップ / アプリケーション エンジニア いまここ 3

Slide 4

Slide 4 text

こんなテーブル、ありませんか? ユーザー ユーザー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

Slide 7

Slide 7 text

シンプルじゃないとは ???「そうは言っても「ユーザー」は「ユーザー」では??」 7

Slide 8

Slide 8 text

シンプルじゃないテーブルの見つけ方 情報や構造の生存期間に着目する ↓ 1 テーブルの中で生存期間に違いがあるテーブルは「怪しい」 8

Slide 9

Slide 9 text

情報の生存期間(列方向)にズレがある例 ユーザー ユーザー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

Slide 11

Slide 11 text

情報の生存期間(行方向)にズレがある例 削除フラグ = false 削除フラグ = true ユーザー 登録 全期間 削除 未削除の行: 全期間及び削除されていない期間に有効な情報 削除済みの行: 全期間及び削除されている期間に有効な情報 11

Slide 12

Slide 12 text

構造の生存期間のズレ ユーザー ユーザー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