これで分かる!多対多リレーションの実現方法【ノーコード・ツールGlide】
テーブル間の多重度が、多対多の関係のままリレーションを実装してしまおう、というお話しを前回しました。今日はその続きでございます😄!
中間テーブルを使わず、多対多のテーブル間でリレーションを実装する!?果たして、どうやるのか?気になる方は、先を読みましょう!
テーブル設計、それでいいのか!?
ユーザーの一覧と動物の一覧の間で、リレーションを組むのでしたね。まずは、データを確認しましょう。動物のGoogleスプレッドシートから。。。
うーん、普通のテーブルですな。。。動物の属性が3つ、淡々とならんでいるだけですねえ🤔。
では、ユーザーのテーブルです。ほほ~、「好きな動物」をユーザーテーブル上に持たせたわけですね。
なるほど!と言いたいところですが、ここに問題があるんです。
「好きな動物を10個登録したい人がいたら、5つめ以降は登録できないんじゃないですか?😅」
う、おっしゃるとおり…。アプリ上で「選べる動物は4つまで!」と指定してまえばいいのでしょうが、選べる数に指定しにくいこともあるでしょう。例えば、「持っている資格」とか?20個くらいある人がいるかもしれないです。そしたら、「資格」列を20個分用意するの?となります。
まだ、問題があります。「好きな動物」列をもっと増やしたらテーブルのセルが「空白(null)」だらけになるのです。例えば、「好きな動物10」まで増やしたとしましょう。でも「好きな動物10」列に値が埋まる人って、ほとんどいないんじゃないでしょうか??
うーん、ちょっと問題のあるテーブルの作りですね。。。それもそのはず、テーブル設計では、「1つの属性に複数のカラムを持たせる」というのは、NGなんです。列方向へカラムの繰り返しがある(またはセルに複数の値が入っている)ので、このテーブル設計は、第1正規形すら満たせていない非正規形となってしまいます😲。非正規形?ようは、テーブルの状態として不適切ですよ~と思ってください。
これを避けるために、中間テーブルを使う「はず」でした。でも、今回は、、、このまま突っ走ります!選択できる「好きな動物」に限度ができてしまう(今回は4つ)のですが、それが許容できるなら、まあ、、、いいじゃないですか!
Googleスプレッドシートの状態は分かりました。では、データエディタはどうなっているでしょう?
アレイ・カラムがカギだった
データエディタ上での、ユーザーテーブルは、次のようになっています。
あれ、好きな動物が一つのカラムに収まっている?これって何でしたっけ?そう、アレイカラムです。複数のカラムをひとまとめにしたものです。Googleスプレッドシートで列名称を「共通の文字列+半角数字」とすると、データエディタ上で自動生成されます。
実は、このように複数のカラムを「えいや」と一つにしてしまうことによって、リレーションが組めるようになるんです。
ユーザーテーブル側でリレーションカラムを作ります。外部キー(テーブル間の紐づけのためのカラム)は、アレイカラムを指定しましょう!参照先は「動物」列ですね。
無事、好きな動物のアイテムと紐づけられました。
続いて「動物」テーブルのリレーションカラムも、同様に、動物のカラムを指定します。
はい、その動物が大好きなユーザーさんの情報と紐づけられました!
リストをリレーションカラムと紐づける
あとは、アプリで設定するだけです。
下のように、山田さんが好きな動物の一覧を表示させたいです。
インラインリスト・コンポーネントを設置します。これはいいですね。
そして、その紐づけ先として、、、リレーションカラムを設定します。ここがミソです!
動物の詳細画面も同様ですよ!
インラインリスト・コンポーネントを設置します。
そして、データソースをリレーションカラムにします。
これで出来上がり!おつかれさまです😄。
まとめ
一応まとめますか。
・多対多の関係のテーブルは、原則として、1対多に変換する。
・その転換のために、「中間テーブル」を使う。
・多対多のままリレーションを組もうとすると、属性値の繰り返しが発生し、適切なテーブル設計とならない(本当は)。
・ただし、選べる属性値の数を指定できるなら、多対多のままでも大きな支障はない。
・Glideではアレイカラムを生成されることで、多対多のままリレーションを組める
となります。
まとめが長いな~😅。まあ良しとしましょう!
では、ビーダゼーン!
※私のやる気アップとブログの品質向上につながりますので、記事が気に入られた方は、「ポチっ」と好きボタンを押してくださったり、フォローいただけますと幸いです🙇。
この記事が気に入ったらサポートをしてみませんか?