ノーコード ラボ

NoCode 関連のツールの紹介、使い方などをやさしく説明します。質問やご指摘大歓迎です。わからないことがあったら、コメントや Twitter などで聞いてください!

データベース設計の大まかな流れについて

f:id:toka-xel:20200922074002p:plain

Bubble camp アシスタントの あぽとです。

BubbleをはじめとしたNoCode開発において、初心者がつまずくポイントのひとつ。 それが、データベース(DB)だと思います。

特に設計をする際、まず何からすればいいのか見当もつかず 手が止まってしまう方も多いと思います。

今回の記事では非エンジニアの方へ向けて、設計の流れ・手順を解説します。

ショッピングサイト

汎用的なDB設計手順を考えてみます。

今回は、Amazon・楽天のようなショッピングサイトを例にしてみます。

1. DBの目的を明確にする

まずは「何を作るのか」、つまり「何ができれば完成とするか」を考えます。

ショッピングサイトの場合

  • ログイン中のユーザーが注文すると、そのユーザーの住所へ商品を発送する →ユーザー情報と注文情報が必要

  • 注文履歴を、ユーザーごと、日付ごとに表示する

などが挙げられます。

更にそれを、どのようなフォーマットで出力するかを考えます。 具体イメージを紙などに描くと効果的です。 今回は注文履歴を例に、このようなフォーマットとします。

f:id:apopoapoto:20200628154633p:plain

DB設計に正解はありません。 よって、ここをしっかり定めることで、よりよい設計ができます。

2. 必要な情報を考え、整理する

DBで管理すべき項目を考え、一覧表を作ります。 先ほど考えた具体イメージから、項目を1つ1つ洗い出していきます。

※今回BubbleのDBに直接書いていますが、まずは紙などで整理すると分かりやすいです。

f:id:apopoapoto:20200628155801p:plain
「注文履歴」テーブル

この状態でもデータは格納できていますが、重複している項目があり無駄が多いです。 例えばお客さんが結婚して名前・住所が変わった場合、DB内の1つ1つを変更することになります。 データが多いと果てしない作業ですし、記入ミスの原因にもなります。

そこで一覧表を分割し、データの重複をなくします。

まず、名前や住所が何度も登場するので、これらは「ユーザー情報」として格納します。

f:id:apopoapoto:20200628155451p:plain
「ユーザー情報」テーブル

また注文日も重複するので、「注文履歴」と「注文詳細(注文商品一覧)」で分割します。

f:id:apopoapoto:20200628155542p:plain
「注文詳細」テーブル

分割した結果、注文履歴テーブルは、合計金額と注文日のみとなりました。

f:id:apopoapoto:20200628161239p:plain
「注文履歴」テーブル

ここまでで3つのテーブルができました。

  • 注文履歴(Order)

  • ユーザー情報(User)

  • 注文詳細(Order Detail)

f:id:apopoapoto:20200628160604p:plain

整理され、見た目としても分かりやすくなりましたね。

3. 一覧表の関係性を確認する

DBの特徴の一つとして、表同士を結びつけられることが挙げられます。(リレーションシップ)

これを使って、分割した表同士を結び付け、自由にデータを取り出せるようにします。

まず、このオーダーはどのユーザーが注文したものか。「ユーザー情報」と「注文履歴」を結びつけます。

具体的には、両テーブルに同じ項目を作り、同じ値を入れることで結びつきます。

今回は「お客様番号」を両テーブルに保持させることで、結びつけます。

次に、「注文詳細」の商品たちは、どの「注文履歴」に属するのか。

こちらも同じように、「注文番号」を保持させて結びつけます。

各テーブルは最終的に、このようになりました。 また、NoCode花子さんによる注文が1件追加されています。

f:id:apopoapoto:20200628172139p:plain
「注文履歴」テーブル

f:id:apopoapoto:20200628172156p:plain
「ユーザー情報」テーブル

f:id:apopoapoto:20200628172212p:plain
「注文詳細」テーブル

このようにリレーションをつけることで、データが自由に取り出せるようになりました。

※Bubbleにおける設定の詳細は、今回は省きます。 Twitterクローンにて解説しているので、そちらを作ってみてください

blog.nocodelab.jp

4. アプリを作成する

これで大まかな設計が完了したので、実際にアプリを作ってみてください。

もしうまく取り出せないデータがある場合、設計がどこかおかしい可能性があります。なぜ結びつかないのか考えながら、設計し直してみてください。

RepeatingGroup等を使用し、完成した商品履歴がこちらです。

https://practicedb.bubbleapps.io/version-test/index_copy?debug_mode=true

エディタも公開するので、具体的な設定方法など参考にしてください。

bubble.io

まとめ

順序だてて書いてみましたが、やはりDB設計はとても難しいです。

まずは手順1,2をしっかり考えることは大切だと思います。

リレーションは上手に活用することで、データを自由に取り出すことができ、表現の幅が広がります。 例えばSNSなら、いいね機能・フォロー機能・メッセージ機能などが実装できるようになります。

学び方としては、本ブログの作品解説を参考に1つずつ作ってみて慣れていくことが、1番の近道だと思います。