LoginSignup
7
4

More than 1 year has passed since last update.

【Bubble】データベースのリレーションシップの設定方法

Posted at

はじめに

この記事はBubbleのリレーションシップの設定方法について記載しています。

BubbleのForumに記載されていたリレーションシップの設定方法に記載されていた内容を写経していましたが、詳細な説明が無かったり、写経する内に発生した疑問に対して自分なりの回答が出来たりと色々あったので、復習も兼ねてメモ代わりに記事にする事にしました。

実はこの記事は投稿するのを忘れていて、下書きのまま1年くらい眠っていました...
時が経てば変わる類の内容ではないので大丈夫だと思いますが、念のためにその旨を記載しておきます。

データの準備

リレーションシップの為に、2つのType(データベーステーブルの様なもの)を作成して、その中にテストデータを登録していきます。

内容は次の通りです。

Relation Sample AというTypeを次の通りに作成し、
DB-A-01.PNG

次のデータを登録します。
このテーブルにしか存在しないデータExists in A only...と、この後作成するテーブルにも存在するExists in A and B...の2種類です。
DB-A-02.PNG

もう1つのType、Relation Sample Bを次の通りに作成し、
DB-B-03.PNG

次のデータを登録します。
このテーブルにしか存在しないデータExists in B only...と、先ほど作成したテーブルにも存在するExists in A and B...の2種類です。
DB-B-04.PNG

使用するelements

  • Repeating Group
  • Text(Relation Sample A表示用)
  • Text(Relation Sample B表示用)

配置は次の通り。
elements-04b.PNG

リレーションの設定

LEFT OUTER JOIN

Sample Relation Aの全データ(LEFTに該当)と、Textが一致するSample Relation Bのデータを表示させます。

次のSQLと同様の処理です。

SELECT
  Sample Relation A.Text,
  Sample Relation B.Text
FROM Sample Relation A
  LEFT OUTER JOIN Sample Relation B
    ON Sample Relation A.Text = Sample Relation B.Text

設定内容

Repeating Groupを次の通りに設定。
LEFT-05.PNG

Text(Relation Sample A表示用)を次の通りに設定。
LEFT-06.PNG

Text(Relation Sample B表示用)を次の通りに設定。
LEFT-07b.PNG

出力結果

次の通りのデータが出力されます。
Relation Sample Aの全データが出力され、Sample Relation BはRelation Sample AのTextデータと同じデータだけが出力されてるのが分かります。
LEFT-08.png

INNER JOIN

Sample Relation AとSample Relation B、お互いのTextが一致するデータだけを表示させます。

次のSQLと同様の処理です。

SELECT
  Sample Relation A.Text,
  Sample Relation B.Text
FROM Sample Relation A
  INNER JOIN Sample Relation B
    ON Sample Relation A.Text = Sample Relation B.Text

設定内容

Repeating Groupを次の通りに設定。
INNER-09.PNG

Text(Relation Sample A表示用)を次の通りに設定。
INNER-11.PNG

Text(Relation Sample B表示用)を次の通りに設定。
INNER-12.PNG

出力結果

次の通りのデータが出力されます。
Sample Relation AとSample Relation B、お互いのTextが一致するデータだけが出力されてるのが分かります。
INNER-13.PNG

FULL OUTER JOIN

FULL OUTER JOINについては先に元の記事を読んで欲しいのですが、英語の記事が苦手な方の為に、要点だけ次に記載しておきます。

要点ですが、元の記事には次の通りの記載があります。

Note that in SQL you will get TableA or TableB null names back even if there is no match - this does not happen in Bubble.

RDBの場合、Joinの条件に一致するデータが存在しなくとも、どちらかのテーブルのnull名が返されますが、Bubbleではnullのデータが発生しないという旨の事が記載されています。

つまり、RDBのFULL OUTER JOINとは異なる挙動を示すという事ですので、RDB経験者はその点に注意してお読みください。

...ただ、元の記事の出力結果のサンプルを見ると、これはFULL OUTER JOINではなくUNIONではないかと思います。

設定内容

Repeating Groupを次の通りに設定。
FULLOUTER-14.PNG

Text(Relation Sample A表示用)を次の通りに設定。
(今回はデータが1列で出力されるため、設定するTextは1つだけ)
FULLOUTER-15.PNG

出力結果

次の通りのデータが出力されます。
...UNIONですよね?
FULLOUTER-16.PNG

RDBのFULL OUTER JOIN

元の記事には記載がありませんが、RDB経験者が想像するFULL OUTER JOINを作成できたので記載します。

設定内容

Repeating Groupを次の通りに設定。(ここは先述のFULL OUTER JOINの設定内容と同じです)
FULLOUTER-14.PNG

Text(Relation Sample A表示用)を次の通りに設定。
FULLOUTER-17.PNG

Text(Relation Sample B表示用)を次の通りに設定。
FULLOUTER-18.PNG

出力結果

次の通りのデータが出力されます。
想像通りのデータが表示されました。
FULLOUTER-20.PNG

先ほどのデータと並べると、こんな感じになります。
FULLOUTER-21.PNG

最後に

元の記事には「FULL OUTER JOIN WITH EXCLUDES」というタイトルで、お互いに存在する値以外の値を取得するものについても記載がありましたが、それについては特に記載する事が無かったので省きました。

Bubbleのリレーションシップに慣れるのであれば、本記事の内容を写経するだけで充分だと思います。

本記事で失敗したのがtypeのフィールド名を「Text」にしてしまった事で、elementsの「Text」と区別がつきづらくなった事です。文脈で判断できるかと思いますが、次回があれば気を付けたいと思います。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4