Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
世界一やさしいテーブル設計のやり方
Search
TKD
November 26, 2023
3
170
世界一やさしいテーブル設計のやり方
テーブル設計のやり方を初心者向けにやさしく解説しています。
TKD
November 26, 2023
Tweet
Share
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
RailsConf 2023
tenderlove
30
1.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Facilitating Awesome Meetings
lara
57
6.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Navigating Team Friction
lara
191
16k
Code Reviewing Like a Champion
maltzj
527
40k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Context Engineering - Making Every Token Count
addyosmani
9
440
Music & Morning Musume
bryan
46
7k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Transcript
世界一やさしい テーブル設計のやり方
次のようなアプリのテーブル設計を 考えてみてください
イベントに申し込めるアプリ エンジニアの勉強会に関する テーブル設計を考えてみてください イベントに申し込む部分の 題材となるアプリについて
バックエンドのエンジニア(フリーランス) 主にRails たまにNestJS、React 複雑な事象を細分化してシンプルに考えるのが得意です 好きなもの 筋トレ 将棋 散歩 🚶♂️ シンプルなもの
簡単に自己紹介 TKD @shuhei_takada
では実際にやっていきます
1. 名詞と動詞を抜き出す
1. 名詞と動詞を抜き出す 動詞:申し込む 名詞:イベント
2. 関係性を図に表す(オブジェクト図)
イベント 申し込む 2. 関係性を図に表す(オブジェクト図)
イベント 申し込む 「誰が」イベントに申し込んだのか分からないのでその情報を付け足す 2. 関係性を図に表す(オブジェクト図)
イベント 申し込む ユーザー 「ユーザーがイベントに申し込む」という関係性を表せた 2. 関係性を図に表す(オブジェクト図)
イベント ? 申し込む ? ユーザー ? 3. それぞれのオブジェクトが持つデータを考える
イベント ・ID:111 ・イベント名:フロントエンド のあれこれ 申し込む ・イベントID:111 ・ユーザーID:222 ユーザー ・ID:222 ・ユーザー名:TKD
3. それぞれのオブジェクトが持つデータを考える
イベント ・ID:111 ・イベント名:フロントエンド のあれこれ 申し込む ・イベントID:111 ・ユーザーID:222 ユーザー ・ID:222 ・ユーザー名:TKD
イベントには複数人のユーザーが申し込めるので図に表すと…? 4. 1対多の関係も図に表す
イベント ・ID:111 ・イベント名:フロントエンド のあれこれ 申し込む ・イベントID:111 ・ユーザーID:222 ユーザー ・ID:222 ・ユーザー名:TKD
申し込む ・イベントID:111 ・ユーザーID:333 ユーザー ・ID:333 ・ユーザー名:マリオ 4. 1対多の関係も図に表す
5. テーブルにする(ER図) イベント ・ID:111 ・イベント名:フロントエンド のあれこれ 申し込む ・イベントID:111 ・ユーザーID:222 ユーザー
・ID:222 ・ユーザー名:TKD 申し込む ・イベントID:111 ・ユーザーID:333 ユーザー ・ID:333 ・ユーザー名:マリオ ↓これをER図にすると...
5. テーブルにする(ER図) ひとまず日本語で書いた簡易的なER図
6. 英語に翻訳、データ型、NOT NULL制約、ユニーク制約、インデックスを考える ↓これをさらに物理設計を考えて…
6. 英語に翻訳、データ型、NOT NULL制約、ユニーク制約、インデックスを考える ER図完成 🎉
もう1つ考えてみましょう
それぞれの参加枠ごとに定員数を設定できます。 イベントには参加枠という概念があり、 誰でも見られるようになっています。 また、イベントに申し込みをした人が どの参加枠で申し込みをしたのか 参加枠をテーブルでどう表現するか考えてみる
1. 名詞と動詞を抜き出す
1. 名詞と動詞を抜き出す 名詞:参加枠
2. 関係性を図に表す(オブジェクト図)
仕様のようです。 管理画面(イベントの作成画面)を見ると イベントに任意の数の参加枠を設定できる テーブル設計のヒントになることは多いです。 このように、管理画面のUIが 2. 関係性を図に表す(オブジェクト図)
イベントが複数の参加枠を持つので… 2. 関係性を図に表す(オブジェクト図)
イベント 参加枠 参加枠 2. 関係性を図に表す(オブジェクト図)
イベント 参加枠 参加枠 ユーザーは参加枠を選んで申し込みできるので… 2. 関係性を図に表す(オブジェクト図)
イベント 参加枠 参加枠 申し込む ユーザー 2. 関係性を図に表す(オブジェクト図)
イベント ? 申し込む ? ユーザー ? 参加枠 ? 参加枠 ?
3. それぞれのオブジェクトが持つデータを考える
イベント ・ID:111 ・イベント名:フロント エンドのあれこれ 申し込む ・参加枠ID:555 ・ユーザーID:222 ユーザー ・ID:222 ・ユーザー名:TKD
参加枠 ・ID:555 ・イベントID:111 ・参加枠名:枠A ・定員数:10 参加枠 ・ID:666 ・イベントID:111 ・参加枠名:枠B ・定員数:20 3. それぞれのオブジェクトが持つデータを考える
4. テーブルにする(ER図) イベント ・ID:111 ・イベント名:フロント エンドのあれこれ 申し込む ・参加枠ID:555 ・ユーザーID:222 ユーザー
・ID:222 ・ユーザー名:TKD 参加枠 ・ID:555 ・イベントID:111 ・参加枠名:枠A ・定員数:10 参加枠 ・ID:666 ・イベントID:111 ・参加枠名:枠B ・定員数:20 ↓これをER図にすると…
4. テーブルにする(ER図) ひとまず日本語で書いた簡易的なER図
5. 英語に翻訳、データ型、NOT NULL制約、ユニーク制約、インデックスを考える ↓さらに物理設計を考えて...
5. 英語に翻訳、データ型、NOT NULL制約、ユニーク制約、インデックスを考える ER図完成 🎉
これはどのようにテーブルで表せるか ✅ キャンセルはどう表現するのか ✅ 申し込みをするとそのイベントを主催しているグループに自動で参加されます。 他にも考えたいこと
→ なぜならオブジェクトを抽象化したものがテーブルだから ✅ まずは日本語で考えると考えやすい ✅ テーブル設計の手順 1. 名詞と動詞を抜き出す 2. オブジェクト図を書く
3. ER図(テーブル)に直す 4. 英語に翻訳、データ型、NOT NULL制約、ユニーク制約、インデックスを考える ✅ いきなりテーブルから考えるのではなく、オブジェクト(レコード)から考えたほうが簡単 まとめ
ご清聴ありがとうございました 🙌