Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
シンプルじゃないテーブルの見つけ方
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
sunnyone
June 25, 2024
Programming
400
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
シンプルじゃないテーブルの見つけ方
sunnyone
June 25, 2024
More Decks by sunnyone
See All by sunnyone
AI時代のDependency Injection
sunnyone
0
37
AIコーディング時代に意識したい縦と横
sunnyone
0
120
Rustとgtk-rsで自分用GUIツールを作ろう
sunnyone
1
110
multirange 型(多重範囲型)の活用
sunnyone
0
150
開発者とのコミュニケーションのはじめかた
sunnyone
0
70
概念モデル→論理モデルで気をつけていること
sunnyone
3
570
印象に残ったLLMの使い方5選
sunnyone
0
51
Next.js App Router登場後の話
sunnyone
0
90
はやい開発のためのJSONデータ型の活用
sunnyone
0
200
Other Decks in Programming
See All in Programming
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
480
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
120
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
450
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
340
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
200
SREの越境 / SRE Collaboration
y0hgi
2
300
APNsからLive Activityを開始する話
yumnumm
0
150
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
160
contenteditable と日本語入力に向き合う
colorful12
0
150
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
140
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
350
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
A designer walks into a library…
pauljervisheath
211
25k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Raft: Consensus for Rubyists
vanstee
142
7.7k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Thoughts on Productivity
jonyablonski
76
5.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Mind Mapping
helmedeiros
1
390
We Have a Design System, Now What?
morganepeng
55
8.4k
Designing Experiences People Love
moore
143
24k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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