仮想外部キー
明示的に定義された外部キーを使用したくない場合があります。外部キーを使用しない理由には、パフォーマンスの問題(CRUD 操作で)、データベースの特性(ClickHouse や Apache Cassandra などのデータベースは外部キーをサポートしません)、一時テーブルの使用(テスト用)、個人的な理由などがあります。
この場合でも、データベースコードを変更せずに外部キーリレーションを作成できます。これを行うには、仮想外部キーを使用します。仮想外部キーは、IDE 仮想オブジェクトです。外部キーの代わりに、仮想キーはデータベースコードで定義されません。
次のクエリ例を検討してください。
visitor_id
がデータベースで外部キーとして定義されていないと仮定します。この JOIN 句では、activity
テーブルの visitor_id
フィールドと visitor
テーブルの id
フィールド間のこの仮想リレーションを引き続き使用できます。この関係を保存して後で使用するか、正規表現を使用して設定で仮想外部キーのルールを構成できます。
仮想外部キー関係は external-data-<data_source_name>.xml に保存されます。XML ファイルの別の名前や、このファイルを保存する別の場所を選択できます。XML ドキュメントへのパスを変更または表示するには、Shift+Enter を押してデータソース設定を開き、オプションタブをクリックして、仮想オブジェクトと属性フィールドを確認します。
仮想外部キー () は、データベースツールウィンドウにあります。他のノードおよびオブジェクトアイコンのリファレンスについては、データベースツールウィンドウトピックのデータソースとその要素の章を参照してください。テーブル列アイコンについては、列に可能なアイコンの組み合わせの章を参照してください。
![データベースの仮想外部キー Virtual foreign keys in Database](https://resources.jetbrains.com/help/img/idea/2024.1/database_object_virtual_foreign_key.png)
仮想外部キーを作成する
データベースツールウィンドウ ( ) で、テーブルのノードまでデータソースツリーを展開します。
テーブルノードを右クリックし、
を選択します。開いた変更ダイアログで、仮想外部キーの名前を名前フィールドに入力します。
ターゲットテーブルペインで、ターゲット表の名前を指定します。
列ペインで、追加ボタン(
)をクリックします。
列名フィールドに、子テーブルの列の名前を指定します。
ターゲット名フィールドに、ターゲット表の列の名前を指定します。
仮想外部キーを追加するには、OK をクリックします。
<data_source_name> の外部データを保存ダイアログが開いたら、external-data-<data_source_name>.xml ファイルのディレクトリを指定し、保存をクリックします。
![「変更」で仮想外部キーを作成するダイアログ Create a virtual foreign key in the Modify dialog](https://resources.jetbrains.com/help/img/idea/2024.1/db_create_virtual_foreing_key_in_modify_dialog.png)
ON 句のテーブルリレーションをクリックし、Alt+Enter を押します。
テーブルのリレーションを保管を選択します。
<data_source_name> の外部データを保存ダイアログが開いたら、external-data-<data_source_name>.xml ファイルのディレクトリを指定し、保存をクリックします。
![テーブルのリレーションを保管 Store table relation](https://resources.jetbrains.com/help/img/idea/2024.1/db_store_table_relation.png)
仮想外部キーのルールを作成する
正規表現を使用して、IntelliJ IDEA が 1 つのテーブルの列を別のテーブルの列に向けるルールを作成できます。
設定を開き(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 : ソース列の仮想外部キーの主キーとして使用されるテーブル名と列名の例。
コード補完で仮想外部キーを表示する
IntelliJ IDEA は、JOIN ステートメントの可能なコード補完提案のリストを生成できます。コード補完リストには、JOIN ステートメントのテーブルの列と同じ名前を持つ他のテーブルの列の候補が含まれています。
例: actor
テーブルに次の列があることを考慮してください: actor_id
、first_name
、last_name
、last_update
候補のリストには、他の表に示されているこれらの列の名前を使用して可能な補完が表示されます。
Ctrl+Alt+S を押して設定を開き、
に移動します。SQL セクションまでスクロールし、名前の一致に基づいて厳密でない外部キーを提案するを選択します。
関連ページ:
![](https://resources.jetbrains.com/help/img/idea/2024.1/db_database_tool_window.png)
データベースツールウィンドウ
データベースツールと SQL プラグインを有効にするこの機能は、IntelliJ IDEA にバンドルされており、デフォルトで有効になっているデータベースツールと SQL プラグインに依存しています。関連する機能が利用できない場合は、プラグインを無効にしていないことを確認してください。を押して設定を開き、を選択します。インストール済みタブを開き、データベースツールおよび SQL プラグインを見つけて、プラグイン名の横にあるチェックボックスを選択します。概要:データベースツールウィンドウ (表示...
![](https://resources.jetbrains.com/help/img/idea/2024.1/database_object_user_role.png)
ユーザーとロール
さまざまなデータベースでは、ユーザーとロールの概念を使用してデータベース内の権限を管理します。どちらもアクセス制御に使用され、一連の権限を定義します。一部のデータベースでは、ログイン権限を持つユーザーをロールとすることができます。ユーザーとロール (と) は、データベースツールウィンドウのサーバーオブジェクトにあります。他のノードとオブジェクトのアイコンのリファレンスについては、データベースツールウィンドウトピックのデータソースとその要素の章を参照してください。ユーザーとロールは、データベースベ...
![](https://resources.jetbrains.com/help/img/idea/2024.1/virtual_view.png)
仮想ビュー
定期的に実行する特定の SQL ステートメントの結果セットを監視する必要がある場合は、仮想ビューを使用します。仮想ビューは、データベースツールウィンドウで結果セットを利用できるようにする IDE 仮想オブジェクトです。仮想ビューはデータベースコードで定義されておらず、そのデータはデータベースに保存されません。仮想ビューの場合、SELECT クエリとは別に、MySQL のや Microsoft SQL Server のなどのステートメントも使用できます。例: PostgreSQL データベースの現...