Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
シンプルじゃないテーブルの見つけ方
Search
sunnyone
June 25, 2024
Programming
1
270
シンプルじゃないテーブルの見つけ方
sunnyone
June 25, 2024
Tweet
Share
More Decks by sunnyone
See All by sunnyone
Next.js App Router登場後の話
sunnyone
0
53
はやい開発のためのJSONデータ型の活用
sunnyone
0
110
フロントエンドトレンドのふりかえりと事業に合わせた選択
sunnyone
0
90
メタプログラミングとは
sunnyone
0
2.1k
RustからPythonを呼び出す
sunnyone
1
4.2k
PowerShellでRazorテンプレートエンジンを使ってみた
sunnyone
0
2.5k
Other Decks in Programming
See All in Programming
[KR] Server Driven Compose With Firebase
skydoves
1
120
Subclassing, Composition, Python, and You
hynek
3
110
Vue :: Better Testing 2024
up1
1
360
C#および.NETに対する誤解をひも解く
ymd65536
0
220
Go製CLIツールGatling Commanderによる負荷試験実施の自動化
okmtz
3
650
Progressive Web Apps for Rails developers
siaw23
2
530
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
3
150
フロントエンドの標準仕様をどう追っているか / How I follow the frontend standards specs
petamoriken
2
170
[PHPカンファレンス沖縄2024]「無理なくできるだけ安全に」テストもないレガシーコードをリファクタリングするテクニック
ikezoemakoto
3
110
"noncopyable types" の使いどころについて考えてみた
andpad
0
130
Quarto Clean Theme
nicetak
0
220
ACES Meet におけるリリース作業改善の取り組み
fukucheee
0
120
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
43
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
327
21k
Building Better People: How to give real-time feedback that sticks.
wjessup
360
19k
The Cult of Friendly URLs
andyhume
76
6k
The Pragmatic Product Professional
lauravandoore
31
6.2k
GitHub's CSS Performance
jonrohan
1030
450k
We Have a Design System, Now What?
morganepeng
49
7.1k
Adopting Sorbet at Scale
ufuk
73
8.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
7
560
Transcript
シンプルじゃないテーブルの見つけ方 @_sunnyone / 2024-06-26 at PHP 勉強会 1
今日お話すること こんな人向けにいけてないかテーブルどうかを知るためのヒントを お伝えします。 列たくさんあるんだけど、正しいのかな? 削除フラグダメって言うけど、boolean の列ってダメなの? Eloquent やDoctrine でなんとなくDB 作ってるけど、大丈夫か心
配 2
自己紹介 Yoichi Imai (@_sunnyone) / Web アプリケーションエンジニア アプリケーション層(L7) プレゼンテーション層(L6) セッション層(L5)
トランスポート層(L4) ネットワーク層(L3) データリンク層(L2) 物理層(L1) ⼤学⽣アルバイト / PHP プログラマ SIer / IT インフラエンジニア スタートアップ / アプリケーション エンジニア いまここ 3
こんなテーブル、ありませんか? ユーザー ユーザーID : bigint «PK» ⽒名 : text ⽒名カナ
: text 郵便番号 : text 住所 : text 電話番号 : text TwitterID : text Twitter トークン : text 削除フラグ : boolean 4
こんなテーブル、ありませんか? ユーザー ユーザーID : bigint «PK» ⽒名 : text ⽒名カナ
: text 郵便番号 : text 住所 : text 電話番号 : text TwitterID : text Twitter トークン : text 削除フラグ : boolean ???「シンプルじゃないんよ」 5
シンプルじゃないとは シンプルじゃないテーブル=複数の責務を持つテーブル 複数の責務を持っていると、データの整合性維持やスキーマの変 更が難しくなる ( 詳しくはアジャイル開発とデータベース設計 by soudai を参照) 6
シンプルじゃないとは ???「そうは言っても「ユーザー」は「ユーザー」では??」 7
シンプルじゃないテーブルの見つけ方 情報や構造の生存期間に着目する ↓ 1 テーブルの中で生存期間に違いがあるテーブルは「怪しい」 8
情報の生存期間(列方向)にズレがある例 ユーザー ユーザーID : bigint «PK» ⽒名 : text ⽒名カナ
: text 郵便番号 : text 住所 : text 電話番号 : text TwitterID : text Twitter トークン : text 削除フラグ : boolean ユーザー登録のタイミングでは住所なしだって? そのためにnullable ? 電話番号って追加されたりしない? 9
情報の生存期間(行方向)にズレがある例 ユーザー ユーザーID : bigint «PK» ⽒名 : text ⽒名カナ
: text 郵便番号 : text 住所 : text 電話番号 : text TwitterID : text Twitter トークン : text 削除フラグ : boolean 列としては削除フラグはいつも存在していて生存期間はずれてなさそ うだけど... ? 10
情報の生存期間(行方向)にズレがある例 削除フラグ = false 削除フラグ = true ユーザー 登録 全期間
削除 未削除の行: 全期間及び削除されていない期間に有効な情報 削除済みの行: 全期間及び削除されている期間に有効な情報 11
構造の生存期間のズレ ユーザー ユーザーID : bigint «PK» ⽒名 : text ⽒名カナ
: text 郵便番号 : text 住所 : text 電話番号 : text TwitterID : text Twitter トークン : text 削除フラグ : boolean 外部サービスってずっと使いますか?生きてますか? 12
シンプルじゃないテーブルを見つけたらどうし たら? 俺達の戦いはまだ始まったばかりだ! 13
参考資料 アジャイル開発とデータベース設計 - 変化に対応するシンプルな実 装のために必要なこと by sodai https://agilejourney.uzabase.com/entry/2022/07/28/103000 イミュータブルデータモデル by
kawasima https://scrapbox.io/kawasima/ イミュータブルデータモデル 14