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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
sunnyone
June 25, 2024
Programming
380
1
Share
シンプルじゃないテーブルの見つけ方
sunnyone
June 25, 2024
More Decks by sunnyone
See All by sunnyone
multirange 型(多重範囲型)の活用
sunnyone
0
94
開発者とのコミュニケーションのはじめかた
sunnyone
0
54
概念モデル→論理モデルで気をつけていること
sunnyone
3
520
印象に残ったLLMの使い方5選
sunnyone
0
35
Next.js App Router登場後の話
sunnyone
0
81
はやい開発のためのJSONデータ型の活用
sunnyone
0
180
フロントエンドトレンドのふりかえりと事業に合わせた選択
sunnyone
0
120
メタプログラミングとは
sunnyone
0
2.6k
RustからPythonを呼び出す
sunnyone
1
4.7k
Other Decks in Programming
See All in Programming
JAWS-UG横浜 #100 祝・第100回スペシャルAWS は VPC レスの時代へ
maroon1st
0
180
2026_04_15_量子計算をパズルとして解く
hideakitakechi
0
120
JOAI2026 1st solution - heron0519 -
heron0519
0
150
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
160
Terraform言語の静的解析 / static analysis of Terraform language
wata727
1
110
Swift Concurrency Type System
inamiy
1
550
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
1.1k
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
210
의존성 주입과 모듈화
fornewid
0
150
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
820
Cache-moi si tu peux : patterns et pièges du cache en production - Devoxx France 2026 - Conférence
slecache
0
310
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
270
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
110
The Mindset for Success: Future Career Progression
greggifford
PRO
0
310
Speed Design
sergeychernyshev
33
1.6k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Are puppies a ranking factor?
jonoalderson
1
3.3k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
120
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
130
Typedesign – Prime Four
hannesfritz
42
3k
Accessibility Awareness
sabderemane
1
110
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
530
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