CATALOG_FKS

注釈

このストアドプロシージャは非推奨であり、Denodo Platform の次のメジャーバージョンでは削除される可能性があります。このプロシージャの代わりに GET_FOREIGN_KEYS プロシージャを使用してください。「GET_FOREIGN_KEYS」は、接続しているデータベースだけではなく、任意のデータベースを検索して同じ情報を返すことができます。

説明

ストアドプロシージャ CATALOG_FKS は、接続しているデータベースの 1 つまたはすべてのビューの外部キーを構成するフィールドのリストを返します。

外部キーは、2 つのビューのデータ間のリンクを確立するために使用される 1 つまたは一連のフィールドです。外部キー参照では、あるビューのプライマリキー値を保持しているフィールドは、別のテーブルの 1 つまたは一連の列によって参照されます。

Virtual DataPort で外部キー制約を作成するには、2 つのビュー間のアソシエーションを作成し、それを参照制約として指定する必要があります。この方法については、管理ガイドの「 アソシエーション 」のセクションで説明しています。

構文

CATALOG_FKS (
    input_view_name : text
)
  • input_view_name (オプション): 外部キーを構成するフィールドのリストの取得対象となるビューの名前。このビューのデータベースに接続している必要があります。

このプロシージャは、外部キーを構成するフィールドごとに 1 つの行を返します。出力スキーマには以下のフィールドがあります。

  • pkdatabase_name: 外部キー関係の他方の側 (アソシエーションの「プリンシパル」側) のビューのデータベース。

  • pkview_name: 外部キー関係の他方の側 (アソシエーションの「プリンシパル」側) のビュー。

  • pkcolumn_name: 外部キー関係の他方の側 (アソシエーションの「プリンシパル」側) のビューの、プライマリキーのフィールド名。

  • fkdatabase_name: 外部キーを持つビューのデータベース。これは常に接続しているデータベースです。

  • fkview_name: 外部キーを持つビュー。

  • fkcolumn_name: 外部キーのフィールドの名前。

  • fk_name: 制約の名前。これはアソシエーションの名前です。

  • pk_name: プライマリキーの名前。これは外部キー関係の他方の側のビューの名前に「_pk」を付けたものです。

  • database_name: アソシエーションを保持するデータベースの名前。アソシエーションは、アソシエーションのビューとは異なるデータベースに格納できます。

必要な権限

このプロシージャは、ユーザーが Metadata 権限を持っているビューに関する情報のみを返します。

以下の項目を定義したとします。

  1. order_details ビュー: このビューのプライマリキーは、 order_id フィールドおよび order_line_id フィールドで構成されています。以下を実行したとします。

  2. order ビュー: このビューのプライマリキーフィールドは、 OrderId です。

  3. 以下のスクリーンショットのような、これらのビュー間のアソシエーション :

../../../../_images/AdvancedVQLGuide-2.png

参照制約であるアソシエーションのみ (スクリーンショットの上部のボックスを参照) が、外部キー制約と見なされます。

このスクリーンショットでは、 orders がアソシエーションのプリンシパル側で、 order_details が依存側です。これは、すべての注文詳細は注文にリンクされる必要があるためです。

order エンドポイントの多重度は 1 です。これは、 order_details の各行が注文の 1 つの行のみにリンクされることを意味しています。

order_details エンドポイントの多重度は + です。これは、 order の各行が order_details の 1 つまたは複数の行にリンクされることを意味しています。

以下のクエリを実行した場合、

SELECT pkdatabase_name, pkview_name, pkcolumn_name, fkdatabase_name, fkview_name
       , fkcolumn_name, fk_name, pk_name, database_name
FROM CATALOG_FKS()
WHERE input_view_name = 'order_details';

結果は以下のようになります。

pkdatabase_na me

pkview_name

pkcolumn_name

fkdatabase_na me

fkview_name

admin

orders

OrderID

admin

order_details

fkcolumn_name

fk_name

pk_name

database_name

OrderID

order_details_fk

orders_pk

admin

(見やすくするために、列は 2 つのテーブルに表示されています)