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
TKD
November 26, 2023
3
150
世界一やさしいテーブル設計のやり方
テーブル設計のやり方を初心者向けにやさしく解説しています。
TKD
November 26, 2023
Tweet
Share
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Designing Experiences People Love
moore
140
23k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
11
1.3k
Git: the NoSQL Database
bkeepers
PRO
428
65k
Building an army of robots
kneath
303
45k
Statistics for Hackers
jakevdp
797
220k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
650
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
BBQ
matthewcrist
87
9.5k
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制約、ユニーク制約、インデックスを考える ✅ いきなりテーブルから考えるのではなく、オブジェクト(レコード)から考えたほうが簡単 まとめ
ご清聴ありがとうございました 🙌