🫧
Bubble→MySQLへの設計移行メモ
概要
-
Bubbleの
Option sets
/App data
をMySQLへ移行するときのテーブル設計メモ - サンプルとして「カテゴリごとにメール通知可否を判定し、ユーザーは複数カテゴリを持つ」という仕様をMySQLの定義で再現する
サンプルシナリオ
- Bubble → MySQLへ移行
- Bubble側の既存仕様: 特定のカテゴリに属するユーザーにはメール通知を行う
移行元:Bubble側のデータ構造
種別 | 例 | 特徴 |
---|---|---|
Option sets | 性別 / タグ / カテゴリ | 動的に追加されないマスタデータ |
App data | ユーザー / 問い合わせ | 動的に追加されるデータ。Option sets 参照可 |
Option sets
:Category
- カテゴリAかカテゴリBを持つユーザーに対してメール送付を行う仕様
- なので、
Option sets
の機能であるattibutes
を使ってis_notifiable
という自作のプロパティを付与-
is_notifiable
が1
なら、Bubble側でメール送信を行うようにしている
-
表示名 | is_notifiable |
---|---|
カテゴリA | 1 |
カテゴリB | 1 |
カテゴリC | 0 |
カテゴリD | 0 |
カテゴリE | 0 |
App data
:User
- 1人のユーザーに対して複数の
Category
を設定できる設計にしている -
Unique ID
はBubble側で自動的に採番されるユニークID
カラム | 型例 |
---|---|
name | string |
category | List of Category (1対多) |
Unique ID | Bubble 自動採番 |
移行先:MySQL側のテーブル設計
- 多対多なので users / categories / user_categories の 3 テーブル構成
categories
- カテゴリテーブル
-
Option sets
のCategory
と対応
column | type | key/制約 | note |
---|---|---|---|
id | BIGINT UNSIGNED | PK, AUTO_INCREMENT | |
name | VARCHAR(255) | UNIQUE, NOT NULL | 表示名 |
is_notifiable | TINYINT(1) | NOT NULL, DEFAULT 0 | 1 = メール対象 |
created_at | TIMESTAMP | ||
updated_at | TIMESTAMP |
users
- ユーザーテーブル
-
App data
のUser
と対応 - Bubbleの
App data
にあるUser
には自動採番されたUnique ID
があるので、移行時にも値を保持して整合性を担保しておく
column | type | key/制約 | note |
---|---|---|---|
id | BIGINT UNSIGNED | PK, AUTO_INCREMENT | |
bubble_unique_id | CHAR(36) | UNIQUE, NULL | Bubble の UID |
VARCHAR(255) | UNIQUE, NOT NULL | ||
name | VARCHAR(255) | NOT NULL | |
created_at | TIMESTAMP | ||
updated_at | TIMESTAMP |
user_categories
-
App data
にあるUser
のList of Category
に対応するための中間テーブル -
user_id
とcategory_id
でプライマリキーを設定
column | type | key/制約 | note |
---|---|---|---|
user_id | BIGINT UNSIGNED | FK → users.id | |
category_id | BIGINT UNSIGNED | FK → categories.id |
まとめ
- とりあえず
Option sets
とApp data
の両方をテーブルに置き換えればOK
Discussion