架构探索技能
何时使用此技能
当您需要以下操作时使用此技能:
-
理解数据库结构
-
查找包含特定类型数据的表
-
发现列名和数据类型
-
映射表之间的关系
-
回答诸如"有哪些表可用?"或"Customer 表有哪些列?"等问题
工作流程
- 列出所有表
使用 sql_db_list_tables 工具查看数据库中所有可用的表。
这将返回您可以查询的完整表列表。
- 获取特定表的架构
使用 sql_db_schema 工具配合表名来检查:
-
列名 - 有哪些字段可用
-
数据类型 - INTEGER, TEXT, DATETIME 等
-
示例数据 - 3 行示例数据以了解内容
-
主键 - 行的唯一标识符
-
外键 - 与其他表的关系
- 获取表关系
使用 sql_db_table_relationship 工具获取表之间的外键/关联关系:
-
关联字段 - 两表通过哪些字段关联
-
JOIN 条件 - 返回格式如 t_orders.customer_id = t_customers.id
示例调用:
sql_db_table_relationship("t_orders, t_customers, t_products")
如果未配置表关系,可以通过以下方式推断:
-
查找以 "Id" 或 "_id" 结尾的列(例如,customer_id, product_id)
-
外键列名通常对应另一个表的主键
-
记录父子关系
- 回答问题
提供清晰的信息:
-
可用表及其用途
-
列名及其包含的内容
-
表之间的关联方式
-
示例数据以说明内容
示例:"有哪些表可用?"
步骤 1: 使用 sql_db_list_tables
响应:
数据库包含多个表:
- Customer - 存储客户信息
- Employee - 存储员工信息
- Invoice - 客户购买记录
- InvoiceLine - 发票中的单个项目 ...
示例:"这些表之间有什么关系?"
步骤 1: 使用 sql_db_table_relationship("Customer, Invoice, InvoiceLine")
响应:
表之间的关系如下: • Invoice.CustomerId = Customer.Id • InvoiceLine.InvoiceId = Invoice.Id
✅ 表关系已获取完成。
示例:"Customer 表有哪些列?"
步骤 1: 使用 sql_db_schema 工具,表名为 "Customer"
响应:
Customer 表包含以下列:
- CustomerId (INTEGER) - 主键,唯一客户 ID
- FirstName (NVARCHAR) - 客户名字
- LastName (NVARCHAR) - 客户姓氏
- Company (NVARCHAR) - 公司名称(可选)
- Address, City, State, Country, PostalCode - 地址字段
- Phone (NVARCHAR) - 电话号码
- Email (NVARCHAR) - 电子邮件地址
- SupportRepId (INTEGER) - 指向 Employee 表的外键
示例数据显示了如下客户:
- 示例客户 1
- 示例客户 2
- 示例客户 3
质量指南
对于"列出表"问题:
-
显示所有表名
-
添加每个表包含内容的简要描述
-
对相关表进行分组(例如,交易、人员)
对于"描述表"问题:
-
列出所有列及其数据类型
-
解释每列包含的内容
-
显示示例数据以提供上下文
-
注明主键和外键
-
解释与其他表的关系
对于"如何查询 X"问题:
-
识别所需的表
-
映射 JOIN 路径
-
解释关系链
-
建议下一步(使用查询编写技能)
常见探索模式
模式 1:查找表
"哪个表包含客户信息?" → 使用 list_tables,然后描述 Customer 表
模式 2:理解结构
"Invoice 表中有什么?" → 使用 schema 工具显示列和示例数据
模式 3:映射关系
"客户如何与发票关联?" → 使用 sql_db_table_relationship("Customer, Invoice, InvoiceLine") 获取关系 → 返回如:Invoice.CustomerId = Customer.Id , InvoiceLine.InvoiceId = Invoice.Id
提示
-
外键通常以 "Id" 结尾,并匹配表名
-
使用示例数据了解值的格式
-
不确定使用哪个表时,先列出所有表