GoLand 2025.2 Help

虚拟外键

在某些情况下,您可能不希望使用显式定义的外键。 不使用外键的原因可能包括性能问题(在 CRUD 操作中)、数据库特性(如 ClickHouse 和 Apache Cassandra 不支持外键)、使用临时表(用于测试)、个人决定等。

在这种情况下,您仍然可以创建外键关系,而无需更改数据库代码。 为此,请使用 virtual foreign keys。 虚拟外键是一个 IDE 虚拟对象。 与外键不同,虚拟外键不会在数据库代码中定义。

请参考以下示例查询:

SELECT * FROM activity JOIN visitor ON visitor_id = visitor.id

假设 visitor_id 在数据库中未定义为外键。 您仍然可以在此 JOIN 子句中使用 visitor_id 字段(位于 activity 表中)与 visitor 字段(位于 id 表中)之间的此虚拟关系。 您可以 保存此关系以便稍后使用,或在设置中使用正则表达式 配置虚拟外键的规则

虚拟外键

虚拟外键关系存储在 external-data-<data_source_name>.xml 中。 您可以为 XML 文件选择其他名称以及其他存储位置。 要更改或查看 XML 文档的路径,请按 Shift+Enter 打开数据源设置,点击 选项 选项卡并查看 虚拟对象和特性 字段。

虚拟外键(虚拟外键 )可在 数据库 工具窗口中找到。

数据库中的虚拟外键

创建虚拟外键

  1. 数据库 工具窗口中,展开数据源树,直到出现表节点。

  2. 右键点击表节点,然后选择 新建|虚拟外键

  3. 在打开的 修改 对话框中,在 名称 字段中输入您的虚拟外键名称。

  4. 目标表 面板中,指定目标表的名称。

  5. 面板中,单击 添加 按钮(“添加”按钮)。

  6. 列名 字段中,指定子表中列的名称。

  7. 目标名称 字段中,指定目标表中列的名称。

  8. 单击 确定 以添加您的虚拟外键。

  9. 如果打开了 Save external data for <data_source_name> 对话框,请指定 external-data-<data_source_name>.xml 文件的目录并点击 保存

在“修改”对话框中创建虚拟外键
  1. 点击 ON 子句中的表关系,然后按 Alt+Enter

  2. 选择 存储表关系

  3. 如果打开了 Save external data for <data_source_name> 对话框,请指定 external-data-<data_source_name>.xml 文件的目录并点击 保存

存储表关系

为虚拟外键创建规则

您可以使用正则表达式创建规则,使 GoLand 能够将一个表中的列指向另一表中的列。

  1. 打开设置(Ctrl+Alt+S ),然后导航至 Database|Other

  2. 定位 虚拟外键 部分。

  3. 在表格中,单击 添加 按钮(单击“添加”按钮)。

  4. 双击 列模式 单元格,并输入用于匹配您希望用作虚拟外键的列名的正则表达式。

  5. 双击 目标列模式 单元格,并输入替换模式。 替换模式使用来自 列模式 表达式的匹配结果,并被解释为正则表达式。

    您可以使用 检查… 按钮(“检查”按钮 )检查您的规则。 选择规则并单击 检查… 按钮后,会打开 规则调试器 对话框。 您可以在 生成的模式 字段中查看结果。 生成的模式 字段中的最终表达式必须与期望的 目标表.列 模式匹配。

    为虚拟外键创建规则

调试虚拟外键规则

  1. 打开设置(Ctrl+Alt+S ),然后导航至 Database|Other

  2. 找到 虚拟外键 部分。

  3. 选择规则,然后单击 检查… 按钮(“检查”按钮)。

  4. 规则调试器 对话框中,填写以下字段:

    • 列模式 :用于匹配您希望用作虚拟外键的列名的正则表达式。

      例如,要描述使用 _id 后缀的列,可使用 (.*)_(?i)id 正则表达式。 此正则表达式会匹配诸如 visitor_idvisitor_Id 的列,并将 visitors 作为第一个捕获组($1 )捕获。

    • 目标列模式 :使用来自 列模式 表达式的匹配结果的替换模式,并被解释为正则表达式。 您可以在 生成的模式 字段中查看结果。 请注意,仅当您在 源列 字段中提供列名示例时,才会显示结果。

      例如,我们可以使用 $1列模式 表达式的捕获组,添加一个点(. )和 id。 此表达式将生成可用作主键的 visitor.id 引用。

      注意目标列模式 替换模式用于在 生成模式 字段中通过捕获组生成正则表达式模式。 请确保对在示例表达式中被字面翻译的符号(如点号($1\\.(?i)id ))进行双重转义。

    • 源列 :一个您希望用作虚拟外键的列名示例。

    • 生成的模式 :与 目标表.列 名称匹配的只读正则表达式模式。 生成的模式 是由 目标列模式 中的替换模式生成的结果。

    • 目标表.列 :一个表名和列名的示例,用作 源列 中虚拟外键的主键。

    调试虚拟外键规则

在代码补全中显示虚拟外键

GoLand 可以为 JOIN 语句生成可能的代码补全建议列表。 代码补全建议列表包括来自其他表的列名,它们与 JOIN 语句中表的列名相同。

例如,假设 actor 表包含以下列: actor_idfirst_namelast_namelast_update。 在建议列表中,您将看到这些列在其他表中出现的匹配名称的备选补全项。

  1. 按下 Ctrl+Alt+S 打开设置,并导航至 Editor|General|Code Completion

  2. 向下滚动至 SQL 部分,选择 根据名称匹配建议非严格外键

    基于名称匹配建议非严格外键已启用
    基于名称匹配建议非严格外键已关闭
最后修改日期: 2025年 9月 26日