通知

AppSheet will be conducting service maintenance starting Sunday, May 19th, 2024 at 12:00 PM (7:00 PM UTC) and completing no later than 4:00 PM PDT (11:00 PM UTC). Learn more

テーブル間の参照

複数のテーブルを持つアプリでは、アプリのテーブル間に参照と呼ばれる接続を作成すると便利です。

たとえば、注文取得アプリに次のようなテーブルが含まれていたとします。

  1. 注文: 注文ごとに 1 行。
  2. 注文の詳細: 項目ごとに 1 行。
  3. 商品: 販売される商品ごとに 1 行。
  4. 顧客: 顧客ごとに 1 行。

この注文取得アプリには、次のような参照が含まれているかもしれません。

  1. 注文の各行は、その注文を行った顧客の顧客行を参照します。
  2. 注文の詳細の各行は、親である注文行を参照します。
  3. 注文の詳細の各行は、対応する商品行を参照します。

参照には以下の 3 つの目的があります。

  1. 関係性を表します。たとえば、注文行と顧客行の間の参照により、注文と、その注文を行った顧客との関係を取得できます。
  2. 別のテーブルにある関連行の情報を簡単に取得できます。たとえば、注文の詳細行と商品テーブルの間の参照により、個別の注文の詳細行から関係する商品行の名前、画像、価格の列の値を取得できます。
  3. 使用すると、ある行から別の行に移動できます。たとえば、特定の注文の詳細行を取得してから、関連する注文行に移動し、さらに関連する顧客行に移動できます。

参照を定義した後で、参照されているテーブルから列の値を取得するには、式の逆参照を使用します。

以下のセクションでは、テーブル間の参照について詳しく解説します。

参照の基本

以下で説明するように、動画を見るかサンプルアプリを使用して参照の基本を学びます。

動画

次の動画では、AppSheet でテーブル間に参照を作成する方法について学べます。

: この動画のコンセプトは現在でも有効ですが、AppSheet アプリエディタの UI は動画撮影時から変更されています。

親子関係と REF 列

サンプルアプリ

注文取得の方法に関する機能サンプルを使用して、アプリのテーブル間の参照を使用する方法の基礎をご確認ください。

 参照の作成

参照をテーブルに追加する方法は 2 つあります。

  • AppSheet では、テーブルを生成または再生成するとき、自動的に参照が追加されます(システムによる追加)。
  • 手動で参照を追加できます(ユーザーによる追加)。

システムにより追加された参照

ユーザーがアプリを最初に作成するとき、またはテーブルの列構造を再生成するとき、AppSheet はテーブル間の参照を自動的に推定しようと試みます。たとえば、顧客テーブルにキーとして Name 列があり、注文テーブルに Customer Name という列があるなら、Customer Name 列が Ref 列と推定されます。

ユーザーにより追加された参照

参照を作成するには、タイプ Ref の列をテーブルに追加し、関係するテーブルの名前を指定します。たとえば、注文テーブルに、顧客テーブルへの Ref を追加します。注文の詳細テーブルに、注文テーブルへ 1 つ、商品テーブルへも 1 つの Ref を追加します。

参照は次のように追加できます。

  1. ワークシートに、参照を格納する列があることを確認します。
  2. 参照を格納する新しい列をワークシートに追加する必要があるなら、テーブル スキーマを再生成します。これにより、新たに追加されたワークシートの列がテーブルに含められます。
  3. [データ]  に移動し、編集するテーブルをリストから選択します。
    アプリエディタを強化しました
    デフォルトでは新しいエディタが有効になっていますが、いつでも以前のエディタに戻すことができます。
     

    以前のエディタを使用する場合

    [Data] > [Columns] に移動し、編集するテーブルを展開します。
  4. [Type] プルダウンで、[Ref] を選択します。
  5. [Source table] プルダウンで、参照されるテーブルを選択します。
  6. [Done] をクリックします。
  7.  次のいずれかを選択して変更を保存します。
    • Save - アプリを保存します。
    • Save & verify data - アプリを保存し、外部依存関係に基づいてアプリが実行可能であるかどうかを確認します。

逆参照

追加した Ref のそれぞれについて、システムは反対の方向に逆参照を自動的に追加します。これは、ユーザーとシステムのどちらにより追加された参照についても行われます。逆参照の仮想列にはデフォルトの名前が付けられますが、変更することもできます。

たとえば、注文テーブルから顧客テーブルに Ref を追加するとき、システムは顧客テーブルから注文テーブルへ自動的に逆参照を追加します。

逆参照には以下の 3 つの目的があります。

  1. 逆参照は、ある行から関連するすべての行に移動できます。
  2. 逆参照は、ユーザー インターフェースで行とともに表示されます。これにより、別のテーブルにある関連する行をすべて簡単に確認できます。
  3. 逆参照は、顧客の注文の数や合計金額のような集計を計算できます。

逆参照の仮想列には、特別な関数 REF_ROWS() を使用するアプリ数式が割り当てられます。REF_ROWS() はバックグラウンドで複雑な SELECT() 動作を行います。

参照と逆参照の両方について、参照のアイコンが表示されます

参照と逆参照に含まれるキーの値

Ref 列には常に、参照されている行のキー列の値が格納されます。たとえば、顧客行のキー列の値が Ann Adams なら、関連する注文行の Ref フィールドには値 Ann Adams が含まれます。テーブルのキー列の値は、そのテーブルの各行を一意に識別します。キー列の値のコピーが Ref 列にあるため、システムは参照されているテーブルの正しい行を曖昧さなしに取得できます。キーとはをご覧ください。

システムにより追加される逆参照の列は、関連する行のキー列の値のリストです。たとえば、顧客レコードである Ann Adams の逆参照には、100310051010 が含まれます(これらが Ann の関連する注文レコードのキー列の値である場合)。個々の行を表示する際に、関連する逆参照はカスタマイズ可能なインライン ビューとして表示されます。

テーブル間の所有関係を示す

参照は、2 つのテーブルが関連していることを示せるだけでなく、1 つのテーブルの行が、他のテーブルの行によって所有されるべき(またはその一部とみなされるべき)であることを示すこともできます。このことは、Ref 列構造の IsAPartOf オプションを有効にすることによって実現できます。通常これは、Ref 列を含む行が、参照されるテーブルの行と関連付けられたときにのみ意味を持つ場合にだけ行われるべきです。たとえば、注文を参照する項目に関して別個の注文の詳細テーブルがあるかもしれません。しかし、概念上は各エントリが注文の一部とみなされるべきであって、独立して存在するべきではありません(言い換えると、注文レコード行がそれを参照する注文の詳細を所有している)。

この所有関係を有効にすることは、以下のことを意味します。

  1. フォームビューでは、ユーザーはフォームを離れることなく、ある行の一部である関連する行の追加と更新を行える必要がある。
  2. 複数行から成るフォームは、単一の更新として扱われる必要がある。
  3. 行が削除される場合、その一部である関連する行も削除される必要がある(単一の更新として扱われる必要がある)。

これらのうち、最初に有効になるのは 1 番目のものです。IsAPartOf とマーク付けされた Ref 列に関連付けられた、システム生成された逆参照列がフォームビューに表示され、ユーザーはフォームビュー内で項目の表示、追加、編集を行えるようになります。これらのオプションが利用できるかどうかは、テーブルまたはスライスのアクセス許可によって決まります(最終のフォームが保存されるまでは、テーブルで更新が許可されていない場合でも、保留中の追加を修正できます)。

以下の制限にご注意ください。

  • テーブルで IsAPartOf とマーク付けできる Ref 列は 1 つだけです(1 つの行が属することができるのは、他の 1 つの行のみです)。
  • フォーム内ではアクションはサポートされていません。フォーム内の逆参照に基づくインライン ビューは、ビューイベントに基づいてアクションを表示したりアクションをトリガーしたりしません。
  • 項目の追加または編集が保留されているフォームをキャンセルすると、それらの追加または編集もキャンセルされます。

この情報は役に立ちましたか?

改善できる点がありましたらお聞かせください。
検索
検索をクリア
検索を終了
メインメニュー
3953800917076532523
true
ヘルプセンターを検索
true
true
true
false
false