この記事を書くきっかけ以前、Bubbleのデータベースの作成方法に関してレクチャーをしていた際に、「This field is a list」の部分にはいつもチェックを入れていないですが、list化が必要な場面ってどんな時なのでしょうかというご質問をいただきました。鋭い質問であらためて深く考えるきっかけになりました。一般的にはどうなのだろうかと、Bubbleのフォーラム等探しましたがベストな回答が見つかりませんでした。意外と意識されていない部分なのかと思い、この疑問を解消できるように自分なりの見解を記事を書いてみたいと思います。そもそもlistとは?Listとは複数の項目を1つのカラム(ここでは「好きな食べ物」)に設定するための設定です。例えば好きな食べ物という項目をList化しない場合には単数(1つ)しか設定できませんが、List化することで複数設定することが可能になります。 好きな食べ物を全て表示したければ以下のようにRepeating Groupに設定すれば表示されます。データの関係性現在の例の場合、ユーザーと好きな食べ物は、データの関係性として、「1:多(複数)」の関係になっています。1人のユーザーが複数の好きな食べ物を設定できるという状態ですね。この1対多となりうる状態においてList以外にも、ユーザーに紐づく好きな食べ物の一覧を出す方法があります。それがテーブル結合です。テーブル結合をして、同様の表示をしてみるテーブル結合とは、複数のテーブルから関連するデータを組み合わせて、必要なデータを取得する方法です。パッとイメージしにくいので今回の例をもとにテーブル結合をしてみます。今はUserというテーブルしかありませんが、新しく好きな食べ物というテーブルを作ります。そして「新しく好きな食べ物.ユーザー情報」がUser型になるようにして紐づくようにします(赤い矢印部分です)。そのうえで、以下のようなデータ設定し、「好きな食べもの」テーブルに設定して、ユーザー情報もユーザーと紐付けます。Repeating Groupでデータを取得する際に「好きな食べもの」テーブルの抽出条件に現在のユーザーを入れることで先程と同じデータが取れます。Listが良い場面、テーブル結合が良い場面ユーザーに紐づく複数の項目を表示することに関してはListでもテーブル結合でも可能でした。では、この2つはどのように使い分けるのがベストなのでしょうか。結論結論としまして、他に関連項目がない場合、Option Setsとの複数の紐付けをしたい場合にはListを利用する。それ以外の場面ではテーブル結合を利用する。が適切だと考えます。理由の説明:他に関連項目がないケースとは?補足として、Listが適している他に関連項目がない状況とは先程の「好きな食べもの」のように、名前しか項目を持っていない状況のことです。この場合、わざわざ結合するテーブルを1つ作るよりもリストで実施した方が早いですね。しかしながら、「好きな食べもの」のテーブルに「好きな度合い」や「食べたい数」という別項目(他の関連項目)が存在する場合には、Listでそれらの情報まで持つことができないのでテーブル結合にする必要があります。もしかするとUserのテーブルに「好きな食べもの」という型でリストを作ればいいんじゃね?と思う方もいるかも知れません。以下のような状態ですね。これでも確かに紐付けはできるのですが欠点が2つあります。1つ目は「好きな食べもの」を表示しなくて良い時にも、ユーザーに紐づく「好きな食べもの」のデータを取ってきてしまい処理が遅くなる可能性があるという点です。2つ目は紐付けられるデータが「好きな食べもの」テーブルのUnique Idになり、DBを見ても何が設定されているのかパッとみて分からないという点です。理由の説明:Option Setsで持つケースとは?Listが適しているもう1つのOption Setsで持つケースでいくと、例えば都道府県などが挙げられます。ユーザーが何かをサービスを提供しており、その提供可能な地域を都道府県で設定したいケースなどです。ここでもわざわざユーザーと都道府県(option set)を繋げるためだけに、テーブルを1つ作るのは手間ですよね。以上になります。少し複雑ですが上手に使い分けていきましょう。