DDL 和 SQL 查询生成中数据库架构的最佳实践

通过自然语言执行 SQL 查询脚本步骤GetTableDDL函数生成总结指定表出现的数据库架构的数据定义语言 (DDL)。基础逻辑依赖于大多数数据库架构的字段设置和关系图,但也可以包括您在“管理数据库”对话框中输入的字段注释作为附加信息。

当数据库架构发送到 AI 模型以生成 SQL 查询时,遵循这些最佳实践有助于提高模型生成有用的 SQL 语句的能力。

使用字母数字表和字段名称

字段名称最好符合 SQL-92 标准。一般来说,使用字母数字字符;不要使用特殊字符,但下划线 (_) 除外。尽量避免使用空格,但如果需要,也可以使用(FileMaker 在与 AI 模型通信时会正确处理包含空格的表和字段名称)。

使用主键和外部键字段

关系中的主键和外部键字段需要具有相同的数据类型——无论是数字、文本,甚至日期或时间戳(如有理由)。

主键字段

任何具有唯一值的字段都可以用作主键字段。但最佳做法是使用与 FileMaker 自动检测主键字段相同的标准。

要能够被检测到,主键字段必须是默认的“主键”字段(或其副本)或者满足以下条件之一:

  • 使用自动输入序列号,并选择以下选项:

    • 自动输入的“禁止在数据输入过程中修改值”选项

    • 验证的“唯一值”选项

  • 使用的自动输入计算包含 Get (UUID)Get (UUID 号) 函数并且选择了“禁止在数据输入过程中修改值” 自动输入选项

  • 是一个存储计算字段,其包含 Get(UUID) 或 Get(UUID 号) 函数

  • 使用自动输入序列号

请参阅定义自动数据输入定义字段验证定义字段索引选项

外部键字段

外部键字段可以与相关表中的相应主键字段具有相同的名称,但不需要。例如,地址表中名为 fk_Contacts 的外部键字段表示从联系人表到地址表的关系。最佳做法是使用一个对您有意义的名称,因为它对 AI 模型也会是一个有用的名称。

为了使字段的目的更清晰,并指定与另一个表格的关系,可以在字段注释中进一步描述该字段(见下文)。例如,在“地址::fk_Contacts”字段中添加以下内容作为注释:“[LLM] 与“联系人”表一对多关系的外部键。”

注释  仅当关系中指定了两个表募本时,外部键及其与相关表的关系才会包含在 DDL 中。

添加字段注释

您在“管理数据库”对话框中输入的字段注释包含在 DDL 中。为了提高模型基于 DDL 生成有用的 SQL 语句的能力,可以使用注释来解释该字段的目的。例如,当字段是标识相关表中记录的外部键时,或者当该字段的名称可能不易被普遍理解时。对于主键字段,即使 FileMaker 检测到它并在 DDL 中表明它是主键,也建议在字段注释中将其标识为主键。

请参阅定义和更改字段

添加 [LLM] 标签以限制包含的字段

可以只指定重要的字段,而不是在 DDL 中包含表格的所有字段,从而减少发送到模型的可能降低响应质量的外部信息。要做到这一点,请在字段注释的开头添加特殊的 [LLM] 标签,然后根据需要添加描述性注释。表中注释不以 [LLM] 标签开头的任何其他字段都排除在 DDL 之外。

例如,如果“产品”表包含这些字段,但“状态”字段中的注释不是以 [LLM] 标签开头:

字段名

注释

产品 ID

[LLM] 唯一标识产品的主键

产品名称

[LLM] 产品的描述性名称

价格

[LLM] 以美元表示的产品价格

状态

库存产品状态。值为“有库存”,“已订购”

则此表的 DDL 是:

复制
创建表 "产品" (
"产品 ID" int, /*唯一标识产品的主键*/
"产品名称" varchar(255), /*产品的描述性名称*/
"价格" int, /*以美元表示的产品价格*/
主键 (产品 ID)
);

请注意,只包含带 [LLM] 标签的三个字段,并且省略了 [LLM] 标签本身。

区分在多个表中具有相同名称的字段

有时,数据库在多个表中可能有具有名称相同的字段。例如,“联系人”表中的“照片”字段存储客户的图像,而“订单”表中的另一个“照片”字段存储订单收据的图像。为帮助确保 AI 模型能够区分这些字段的不同目的,请添加字段注释以澄清。例如,在“联系人::电话”字段注释中添加“[LLM] 客户照片”,在“订单::电话‘字段注释中添加“[LLM] 订单收据照片”。

说明大小写何时重要

SQL 查询区分大小写,因此根据文本是大写还是小写,结果可能会有所不同。例如,“产品”表中的“标签”字段存储每个产品的标签,标题全部大小写。在这种情况下,为了避免意外的查询结果,请添加“[LLM]产品标签,标题大小写”作为“产品::标签”字段的注释。

提供有效的字段值

对于使用自定义值列表来指定有效字段值的字段,最佳做法是在字段注释中提供有效值,以便 AI 模型生成最佳的 SQL 查询。例如,添加“[LLM] 职位名称,有效值为外科医生、医生、牙医、护士和药剂师”作为“联系人::职位名称”字段的字段注释。

不查询摘要字段

FileMaker 数据库中摘要字段的值取决于当前搜索结果中的记录,因此 SQL 查询在某些情况下可能会返回不正确的结果。而应在字段注释中使用 [LLM] 标签排除摘要字段。SQL 足够复杂,可以在不将摘要字段包含在 DDL 中的情况下执行摘要字段的任务。