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
130
世界一やさしいテーブル設計のやり方
テーブル設計のやり方を初心者向けにやさしく解説しています。
TKD
November 26, 2023
Tweet
Share
Featured
See All Featured
Optimizing for Happiness
mojombo
372
69k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
244
1.2M
Music & Morning Musume
bryan
43
5.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
Building Flexible Design Systems
yeseniaperezcruz
322
37k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
For a Future-Friendly Web
brad_frost
173
9.1k
GraphQLの誤解/rethinking-graphql
sonatard
58
9.5k
Making Projects Easy
brettharned
110
5.6k
Embracing the Ebb and Flow
colly
80
4.3k
Robots, Beer and Maslow
schacon
PRO
155
8k
Designing Experiences People Love
moore
136
23k
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制約、ユニーク制約、インデックスを考える ✅ いきなりテーブルから考えるのではなく、オブジェクト(レコード)から考えたほうが簡単 まとめ
ご清聴ありがとうございました 🙌