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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
sunnyone
June 25, 2024
Programming
1
370
シンプルじゃないテーブルの見つけ方
sunnyone
June 25, 2024
Tweet
Share
More Decks by sunnyone
See All by sunnyone
multirange 型(多重範囲型)の活用
sunnyone
0
84
開発者とのコミュニケーションのはじめかた
sunnyone
0
50
概念モデル→論理モデルで気をつけていること
sunnyone
3
500
印象に残ったLLMの使い方5選
sunnyone
0
33
Next.js App Router登場後の話
sunnyone
0
79
はやい開発のためのJSONデータ型の活用
sunnyone
0
180
フロントエンドトレンドのふりかえりと事業に合わせた選択
sunnyone
0
120
メタプログラミングとは
sunnyone
0
2.4k
RustからPythonを呼び出す
sunnyone
1
4.6k
Other Decks in Programming
See All in Programming
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
300
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
120
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
170
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.3k
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
250
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
390
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
630
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.1k
AI活用のコスパを最大化する方法
ochtum
0
120
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
5
1k
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
560
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
5
1.6k
Featured
See All Featured
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
380
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
180
Being A Developer After 40
akosma
91
590k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
210
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
The browser strikes back
jonoalderson
0
810
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
340
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