仮想外部キー
明示的に定義された外部キーを使用したくない場合があります。 外部キーを使用しない理由としては、パフォーマンスの問題(CRUD 操作)、データベースの特性(ClickHouse や Apache Cassandra などのデータベースは外部キーをサポートしていません)、一時テーブルの利用(テスト用)、個人的な理由などがあります。
この場合でも、データベースコードを変更せずに外部キーリレーションを作成できます。 これを行うには、 仮想外部キーを使用します。 仮想外部キーは、IDE 仮想オブジェクトです。 外部キーの代わりに、仮想キーはデータベースコードで定義されません。
次のクエリ例をご覧ください:
visitor_id がデータベースの外部キーとして定義されていないと仮定します。 この JOIN 句では、 activity テーブルの visitor_id フィールドと visitor テーブルの id フィールド間のこの仮想関係を引き続き使用できます。 この関係を保存して後で使用することも、正規表現を使用して設定で仮想外部キーの ルールを構成することもできます。
仮想外部キー関係は external-data-<data_source_name>.xml に保存されます。 XML ファイルの別の名前や、このファイルを保存する別の場所を選択できます。 XML ドキュメントへのパスを変更または表示するには、 Ctrl+Alt+Shift+S を押してデータソース設定を開き、 オプション タブをクリックして、 仮想オブジェクトと属性 フィールドを確認します。
仮想外部キー () は データベースエクスプローラー にあります。
その他のノードおよびオブジェクトアイコンのリファレンスについては、 データベースエクスプローラー トピックの データソースとその要素 の章を参照してください。
表の列アイコンについては、 列に可能なアイコンの組み合わせ の章を参照してください。
表示オプション メニューのツリーオブジェクト表示オプションを使用して、ツリーオブジェクトを非表示、並べ替え、フィルター処理、グループ化します。

仮想外部キーを作成する
データベースエクスプローラー で、テーブルのノードまでデータソースツリーを展開します。
テーブルノードを右クリックし、 を選択します。
開いた 変更する。 ダイアログで、仮想外部キーの名前を 名前 フィールドに入力します。
ターゲットテーブル ペインで、ターゲット表の名前を指定します。
列 ペインで、 追加 ボタン(
)をクリックします。
列名 フィールドに、子テーブルの列の名前を指定します。
ターゲット名 フィールドに、ターゲット表の列の名前を指定します。
仮想外部キーを追加するには、 OK をクリックします。
<data_source_name> の外部データを保存; ダイアログが開いたら、 external-data-<data_source_name>.xml ファイルのディレクトリを指定し、 保存 をクリックします。

ON句のテーブル関係をクリックし、 Alt+Enter を押します。テーブルリレーションを保存 を選択します。
<data_source_name> の外部データを保存; ダイアログが開いたら、 external-data-<data_source_name>.xml ファイルのディレクトリを指定し、 保存 をクリックします。

仮想外部キーのルールを作成する
正規表現を使うことで、DataGrip があるテーブルの列を別のテーブルの列に紐づけるルールを作成できます。
設定を開き(Ctrl+Alt+S)、 に移動します。
仮想外部キー セクションを見つけます。
テーブルで、 追加 ボタン (
) をクリックします。
カラムのパターン セルをダブルクリックし、仮想外部キーとして使用する列名に一致する正規表現を入力します。
ターゲットカラムのパターン セルをダブルクリックし、置換パターンを入力します。 置換パターンは カラムのパターン 式からの一致を使用し、正規表現として解釈されます。
確認 ... ボタン (
) を使用してルールを確認できます。 ルールを選択して 確認 ... ボタンをクリックすると、 ルールデバッガー ダイアログが開きます。 結果は 生成されたパターン: フィールドに表示されます。 生成されたパターン: フィールドに表示される式は、目的の ターゲット table.column: パターンと一致する必要があります。

仮想外部キーのデバッグルール
設定を開き(Ctrl+Alt+S)、 に移動します。
仮想外部キー セクションを見つけます。
ルールを選択し、 確認 ... ボタン (
) をクリックします。
ルールデバッガー ダイアログで、次のフィールドに入力します。
カラムのパターン:: 仮想外部キーとして使用したい列名に一致する正規表現。
例:
_id後置記号を使用する列を記述するには、(.*)_(?i)id正規表現を使用します。 この正規表現は、visitor_idやvisitor_Idなどの列を検出し、visitorsを最初のキャプチャーグループ($1)としてキャプチャーします。ターゲットカラムのパターン: カラムのパターン: 式のマッチ結果を使用する置換パターンで、正規表現として解釈されます。 結果は 生成されたパターン フィールドに表示されます。 なお、結果は ソース列: フィールドに列名の例を入力した場合にのみ表示されます。
例: カラムのパターン 式からキャプチャーされたグループ (
$1) を使用し、ドット (.) とidを追加します。 この式は、主キーとして使用できるvisitor.id参照を生成します。メモ: ターゲットカラムのパターン: 置換パターンは、キャプチャーされたグループを含む正規表現パターンを パターンを生成する フィールドで生成するために使用されます。 例の式 (
$1\\.(?i)id) のドットのように文字通りに変換されるシンボルは、二重にエスケープしてください。ソース列:: 仮想外部キーとして使用したい列名の例。
生成されたパターン: ターゲット table.column: 名前に一致する、生成された読み取り専用の正規表現パターン。 生成されたパターン: は、 ターゲットカラムのパターン: の置換パターンによって生成された結果です。
ターゲット table.column:: ソース列 の仮想外部キーの主キーとして使用されるテーブル名と列名の例:。

コード補完で仮想外部キーを表示する
DataGrip は、 JOIN ステートメントの可能なコード補完候補のリストを生成できます。 コード補完リストには、 JOIN ステートメントのテーブルの列と同じ名前を持つ他のテーブルの列の提案が含まれます。
例えば、 actor テーブルに次のカラムがあるとします: actor_id、 first_name、 last_name、 last_update。 候補リストには、他のテーブルに存在するこれらのカラム名前の補完候補が表示されます。
Ctrl+Alt+S を押して設定を開き、 に移動します。
SQL セクションまでスクロールし、 名前の一致に基づいて厳密でない外部キーを提案する を選択します。

