JBI オンラインスタディR [リレーション]
【ながにぃ式リレーション実践編】
実践②
◆ 1対1 (いち たい いち)のリレーション
「◯対◯」というのはデータベースの用語みたいなものです。どのようなリレーション(関連性)かを示すもので、主に「1対1」と「1対多」の2つがあります。(尚、本セクションでは「1対多」について比重をおいた内容になっています。)
まず「1対1」について。前のセクションでは「購入記録」TO のレイアウトに、「販売会社」TO のレコード情報を表示するリレーションをやってみました。
そのリレーションは「1対1」でした。購入記録のレコード1件に対して、販売会社は1件だけ存在するからです。
基点は左側の、購入記録1レコードずつの「購入品(機材)」としています。
購入先の販売会社は機材1つに対して1つの会社です(領収書の発行元の会社は1つの場合がほとんどですよね)。
記録型のテーブルに、マスタ型のテーブルから参照してデータを表示する場合、「1対1」のパターンが多いです。
◆ 1対多(いち たい た)のリレーション
次に「1対多」というリレーションです。本セクションのメインの概念です。
今度は「販売会社」を左側に置いて基点としてみます。
どの販売会社から、なんの機材をいくつ購入したかを考える場合、販売会社を左に置いて基点とします。(左から右に向く流れです。雑談ですが 左 → 右 という流れは人間の古くからの慣習からきているのでは?と想像してしまいます。)
上の図の通り、1つの販売会社につき複数の購入機材が考えられます。これが「1対多」のリレーションです。
◆ 1対多のリレーション内容をレイアウトに表示する(不十分パターン)
では、「1対多」のリレーションを実践します。
販売会社のレイアウトに、複数の購入記録レコードを表示する、ということをやってみます。まずは問題ありのパターンから。
販売会社のレイアウトには販売会社TO が設定されています。この TO を基点にしてリレーションしていくことになります。
レイアウトの形式は何でも良いですが、分かりやすさを優先したいのでリスト形式で用意しましょう。それと、今回はレイアウトの左側にフィールドを寄せておいてください。次の図のような感じです。
レイアウトの設定で、・・・・・・
では、ながにぃ式リレーションで設定していきます。データベースの管理から、「リレーションシップ」タブを開きます。いまの状態は次の図のようになっていると思います。
TO の中のフィールドとフィールドをドラッグで繋ぎたいので、右上隅のボタンで一旦 TO を大きくしてフィールドを表示させます。
販売会社ID フィールド同士を繋ぎます。購入記録の方は「販売会社ID_外部キー」というフィールド名になっています。
そして右側リレーション用の TO 名を変更します。
前のセクションでは、繋ぐ前に TO 名を変更しましたが、繋ぐ前でも後でも順番はどちらでも大丈夫です。
ながにぃ式リレーションでは、このような命名ルールを使うことにしています。TO 名が長くなるのが弱点です。でも分かりやすさを重視するためやむを得ないところです。
それではレイアウトにフィールドを配置してみましょう。
購入記録のデータ(レコード)は表示されたでしょうか?
ただ、この表示には問題があります。次の章で解説します。
◆ 1対多のリレーション内容をポータルで表示する(問題解決パターン)
さて、なにが問題なのでしょうか?
1つの販売会社に対して購入記録は複数あるはずです。なのに1件しか表示されていません。
「1対多」のリレーションでは、単にフィールドを配置するだけだと最初のレコードだけしか表示がされません。この問題を解決をしていきます。
参照先の購入記録レコードの状態を見ながら進めたいと思います。せっかくなので、「新規ウインドウ」によってデータの状態を見てみましょう。FileMaker は複数のウインドウを出すことができます。
メニューバー「ウインドウ > 新規ウインドウ」で、もう一つウインドウを出してください。
次に、レイアウトを「購入記録_リスト形式」に切替えます。
新規ウインドウを使うと、別々のウインドウでそれぞれ別のレイアウトを表示することができるので便利です。
さて、102 株式会社コスモス は、2つの機材の購入記録があるようです。
*図はレイアウトの間を省略している
本来なら、販売会社レイアウトでの「 102 株式会社コスモス」のレコードでは、購入記録が2件表示されるのが理想です。ところが、最初のレコードの「接続コード」だけが表示されているのが現状です。(2レコード目の「電池」をどう表示するかが課題)
その2件を表示させるために、「ポータル」という機能を使います。
レイアウトモードにしてやってみます。
まずは配置したフィールドを一旦ボディから取り除きます。
2件の購入記録レコードが表示されました。この見え方が「1対多」の状態をよく表していると思います。
このポータルによる表示によって、販売会社のレイアウトを確認するだけで各社の機材購入状況が「見える化」できました。
ここでは詳しくやりませんがポータルには「ソート」や「フィルタ」など色々な機能が備わっています。「ああしたい」「こうしたい」という要望が出たときに、いずれ着目することになると思います。
さて、ポータルのフィールドが何のデータが入っているのか分かりにくいです。そこで、項目を付けてみます。ポータルの各フィールドのすぐ上あたりに、テキストツールでテキスト文字を置いて項目名を入れます。
ブラウズモードにしてみると、項目名っぽくなっていると思います。もちろん、枠をつけたり色をつけたりして、使う人にとってより良いデザイン、見やすいデザインにしていくことが望ましいです。(デザインについてはここでは取り上げません。)
もっと言うと、フィールド名をそのままではなく「品目カテゴリ」など使う人がぱっと見て分かりやすい項目名にしておく方が良い場合もあります。
この実践ではリスト形式でポータルを使い、「1対多」の表示をやってみました。
ポータルはもちろんフォーム形式でも使用できます。(表形式だけはボディにポータルを置けません)
ポータルにフィールドを追加する場合はどうすればいいでしょうか。
「購入時間」を追加してみたいと思います。まずはスペースを空けるためポータルの横幅を拡げます。
ブラウズモードで確認してみると、3行分になっていますね。4行以上になるとスクロールができるようになります。(ポータルの設定で「垂直スクロールを許可」にチェックが入っているため)
◆ 1対1と1対多のまとめ
まとめます。リレーション先のレコード情報をレイアウトに表示する場合のそれぞれの対応です。
◉ 1対1の場合
リレーション先の TO のフィールドをレイアウト上に通常通り配置して OK。(関連するレコードは1件しかないため)
[例:購入記録レイアウトに、マスタの販売会社名を表示する。]
◉ 1対多の場合
リレーション先の TO に設定したポータルをレイアウト上に配置する。(関連するレコードは複数件の可能性があるため)
[例:マスタの販売会社レイアウトに、関連する複数の購入記録レコードを表示する。]
*リレーションは計算式などレイアウト以外でも使いますが、まずはレイアウトで使うのが基本かと思うので上の2つをぜひ使いこなせるようになってほしいです。
◆ (参考)多対1・多対多のリレーション
◉ 多対1
「多対1」という概念は、特に考えなくても大丈夫というのが結論です。(個人的見解)
◉ 多対多
『[準備]リレーションの概要』セクションで「中間テーブル」が出てきたと思います。ここでの「多対多」がまさに中間テーブルを必要とします。
ただ、若干ややこしくなる内容にもなりますので、混乱を避けるためここでは一旦解説を見送ります。後のセクションのどこかで取り扱いたいと思います。
◆ 最初のうちは『ながにぃ式リレーション』の「型」 どおりに
リレーションは理解しにくいところでもあります。まずは『ながにぃ式リレーション』 を「型」どおりにやって、ご自身で追加・修正・削除できるようになって頂きたいと思います。
もう一度、基本となる『ながにぃ式リレーション』の「型」を再掲します。
たとえいま完全に理解できなくても、「型」があれば取りあえずは進むことができます。まずはご自身の業務や状況をラクにし、より良い未来へと進んで頂きたいと思います。
ながにぃ式リレーションは、FileMaker 業界で一般的に知られる「アンカーブイ方式」という手法をベースにしています。そのため、もしも外部の業者に改修や機能アップを依頼するときにも、第三者が内容を把握しやすいというメリットがあります。
また、リレーションが理解できてくれば(1~2年後とか?)、いろんな応用をご自身で試してみても良いですし、サイト上にあるサンプルや他の開発会社さんの方法を取り入れても良いと思います。
FileMaker に正解はありません。あるのは「最適解」だと思っています。
それぞれの環境や状況、技術レベルに合った FileMaker であることが何よりで、そこから少しずつ底上げされていくのが良いと考えます。
『ながにぃ式リレーション』が、あなたの業務効率を上げたり状況をより良い方向に進むための手助けになれば大変幸いです。
このページは以上になります。続きは次のセクションにて。
ここまでお疲れ様でした!
✻ 本スタディは以上となります。ここまでだけでも何かお役に立てていたら幸いです。
✻ 本スタディで不明な点や質問が出た場合は、Q&Aセミナーのリクエストをお送りください。