Bubble camp アシスタントの あぽとです。
BubbleをはじめとしたNoCode開発において、初心者がつまずくポイントのひとつ。 それが、データベース(DB)だと思います。
特に設計をする際、まず何からすればいいのか見当もつかず 手が止まってしまう方も多いと思います。
今回の記事では非エンジニアの方へ向けて、設計の流れ・手順を解説します。
ショッピングサイト
汎用的なDB設計手順を考えてみます。
今回は、Amazon・楽天のようなショッピングサイトを例にしてみます。
1. DBの目的を明確にする
まずは「何を作るのか」、つまり「何ができれば完成とするか」を考えます。
ショッピングサイトの場合
ログイン中のユーザーが注文すると、そのユーザーの住所へ商品を発送する →ユーザー情報と注文情報が必要
注文履歴を、ユーザーごと、日付ごとに表示する
などが挙げられます。
更にそれを、どのようなフォーマットで出力するかを考えます。 具体イメージを紙などに描くと効果的です。 今回は注文履歴を例に、このようなフォーマットとします。
DB設計に正解はありません。 よって、ここをしっかり定めることで、よりよい設計ができます。
2. 必要な情報を考え、整理する
DBで管理すべき項目を考え、一覧表を作ります。 先ほど考えた具体イメージから、項目を1つ1つ洗い出していきます。
※今回BubbleのDBに直接書いていますが、まずは紙などで整理すると分かりやすいです。
この状態でもデータは格納できていますが、重複している項目があり無駄が多いです。 例えばお客さんが結婚して名前・住所が変わった場合、DB内の1つ1つを変更することになります。 データが多いと果てしない作業ですし、記入ミスの原因にもなります。
そこで一覧表を分割し、データの重複をなくします。
まず、名前や住所が何度も登場するので、これらは「ユーザー情報」として格納します。
また注文日も重複するので、「注文履歴」と「注文詳細(注文商品一覧)」で分割します。
分割した結果、注文履歴テーブルは、合計金額と注文日のみとなりました。
ここまでで3つのテーブルができました。
注文履歴(Order)
ユーザー情報(User)
注文詳細(Order Detail)
整理され、見た目としても分かりやすくなりましたね。
3. 一覧表の関係性を確認する
DBの特徴の一つとして、表同士を結びつけられることが挙げられます。(リレーションシップ)
これを使って、分割した表同士を結び付け、自由にデータを取り出せるようにします。
まず、このオーダーはどのユーザーが注文したものか。「ユーザー情報」と「注文履歴」を結びつけます。
具体的には、両テーブルに同じ項目を作り、同じ値を入れることで結びつきます。
今回は「お客様番号」を両テーブルに保持させることで、結びつけます。
次に、「注文詳細」の商品たちは、どの「注文履歴」に属するのか。
こちらも同じように、「注文番号」を保持させて結びつけます。
各テーブルは最終的に、このようになりました。 また、NoCode花子さんによる注文が1件追加されています。
このようにリレーションをつけることで、データが自由に取り出せるようになりました。
※Bubbleにおける設定の詳細は、今回は省きます。 Twitterクローンにて解説しているので、そちらを作ってみてください
4. アプリを作成する
これで大まかな設計が完了したので、実際にアプリを作ってみてください。
もしうまく取り出せないデータがある場合、設計がどこかおかしい可能性があります。なぜ結びつかないのか考えながら、設計し直してみてください。
RepeatingGroup等を使用し、完成した商品履歴がこちらです。
https://practicedb.bubbleapps.io/version-test/index_copy?debug_mode=true
エディタも公開するので、具体的な設定方法など参考にしてください。
まとめ
順序だてて書いてみましたが、やはりDB設計はとても難しいです。
まずは手順1,2をしっかり考えることは大切だと思います。
リレーションは上手に活用することで、データを自由に取り出すことができ、表現の幅が広がります。 例えばSNSなら、いいね機能・フォロー機能・メッセージ機能などが実装できるようになります。
学び方としては、本ブログの作品解説を参考に1つずつ作ってみて慣れていくことが、1番の近道だと思います。