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

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

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

仮想外部キーのルールを作成する
正規表現を使用して、PyCharm がテーブルのある列を別のテーブルの列に指すルールを作成できます。
設定を開き(Ctrl+Alt+S)、 に移動します。
仮想外部キー セクションを見つけます。
テーブルで、 追加 ボタン (
) をクリックします。
Column pattern セルをダブルクリックし、仮想外部キーとして使用する列名に一致する正規表現を入力します。
Target column pattern セルをダブルクリックし、置換パターンを入力します。 置換パターンは Column pattern 式からの一致を使用し、正規表現として解釈されます。
Check... ボタン (
) を使用してルールを確認できます。 ルールを選択して Check... ボタンをクリックすると、 Rule debugger ダイアログが開きます。 結果は Generated pattern: フィールドで確認できます。 Generated pattern: フィールドの結果の式は、目的の Target table.column: パターンと一致する必要があります。

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

コード補完で仮想外部キーを表示する
PyCharm は、 JOIN ステートメントのコード補完候補のリストを生成できます。 コード補完リストには、 JOIN ステートメントのテーブルの列と同じ名前を持つ他のテーブルの列の提案が含まれます。
たとえば、 actor テーブルに次の列があるとします: actor_id、 first_name、 last_name、 last_update。 候補リストには、他のテーブルに存在するこれらのカラム名前の補完候補が表示されます。
Ctrl+Alt+S を押して設定を開き、 に移動します。
SQL セクションまでスクロールし、 Suggest non-strict foreign keys based on the name matching を選択します。

