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
140
世界一やさしいテーブル設計のやり方
テーブル設計のやり方を初心者向けにやさしく解説しています。
TKD
November 26, 2023
Tweet
Share
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
BBQ
matthewcrist
85
9.3k
Code Reviewing Like a Champion
maltzj
520
39k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Six Lessons from altMBA
skipperchong
27
3.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
GraphQLとの向き合い方2022年版
quramy
43
13k
Automating Front-end Workflow
addyosmani
1366
200k
Gamification - CAS2011
davidbonilla
80
5k
Adopting Sorbet at Scale
ufuk
73
9.1k
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制約、ユニーク制約、インデックスを考える ✅ いきなりテーブルから考えるのではなく、オブジェクト(レコード)から考えたほうが簡単 まとめ
ご清聴ありがとうございました 🙌