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

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

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

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

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

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

