name: 架构探索 description: 用于发现和理解数据库结构、表、列和关系
架构探索技能
何时使用此技能
当您需要时使用此技能:
- 理解数据库结构
- 查找哪些表包含特定类型的数据
- 发现列名和数据类型
- 映射表之间的关系
- 回答类似“有哪些表可用?”或“Customer表有哪些列?”的问题
工作流程
1. 列出所有表
使用 sql_db_list_tables 工具查看数据库中所有可用的表。
这将返回您可以查询的完整表列表。
2. 获取特定表的模式
使用带有表名的 sql_db_schema 工具来检查:
- 列名 - 可用的字段
- 数据类型 - INTEGER、TEXT、DATETIME 等
- 示例数据 - 3个示例行以理解内容
- 主键 - 行的唯一标识符
- 外键 - 与其他表的关系
3. 映射关系
识别表如何连接:
- 查找以“Id”结尾的列(例如,CustomerId、ArtistId)
- 外键链接到其他表的主键
- 记录父子关系
4. 回答问题
提供关于以下内容的清晰信息:
- 可用表及其用途
- 列名及其包含的内容
- 表如何相互关联
- 示例数据以说明内容
示例:“有哪些表可用?”
步骤 1: 使用 sql_db_list_tables
响应:
Chinook 数据库有 11 个表:
1. Artist - 音乐艺术家
2. Album - 音乐专辑
3. Track - 单曲
4. Genre - 音乐流派
5. MediaType - 文件格式(MP3、AAC 等)
6. Playlist - 用户创建的播放列表
7. PlaylistTrack - 播放列表中的曲目
8. Customer - 商店顾客
9. Employee - 商店员工
10. Invoice - 顾客购买
11. InvoiceLine - 发票中的单个项目
示例:“Customer表有哪些列?”
步骤 1: 使用带有表名“Customer”的 sql_db_schema
响应:
Customer 表有以下列:
- CustomerId (INTEGER) - 主键,唯一顾客ID
- FirstName (NVARCHAR) - 顾客的名字
- LastName (NVARCHAR) - 顾客的姓氏
- Company (NVARCHAR) - 公司名称(可选)
- Address、City、State、Country、PostalCode - 位置字段
- Phone (NVARCHAR) - 电话号码
- Fax (NVARCHAR) - 传真号码
- Email (NVARCHAR) - 电子邮件地址
- SupportRepId (INTEGER) - 外键指向 Employee 表
示例数据显示顾客如:
- Luís Gonçalves 来自巴西
- Leonie Köhler 来自德国
- François Tremblay 来自加拿大
示例:“如何按艺术家查找收入?”
步骤 1: 识别需要的表
- Artist(有艺术家名称)
- Album(链接艺术家到曲目)
- Track(链接专辑到销售)
- InvoiceLine(有销售数据)
- Invoice(有收入总额)
步骤 2: 映射关系
Artist (ArtistId)
↓ 1:多
Album (ArtistId, AlbumId)
↓ 1:多
Track (AlbumId, TrackId)
↓ 1:多
InvoiceLine (TrackId, UnitPrice, Quantity)
响应:
要按艺术家查找收入,您需要:
1. 从 Artist 表开始
2. 通过 ArtistId JOIN 到 Album
3. 通过 AlbumId JOIN 到 Track
4. 通过 TrackId JOIN 到 InvoiceLine
5. 求和收入(UnitPrice * Quantity)
6. 按艺术家名称分组
这需要查询编写技能来执行。
质量指南
对于“列出表”问题:
- 显示所有表名
- 添加每个表包含内容的简要描述
- 分组相关表(例如,音乐目录、交易、人员)
对于“描述表”问题:
- 列出所有列及其数据类型
- 解释每列包含的内容
- 显示示例数据以提供上下文
- 注明主键和外键
- 解释与其他表的关系
对于“如何查询 X”问题:
- 识别需要的表
- 映射 JOIN 路径
- 解释关系链
- 建议下一步(使用查询编写技能)
常见探索模式
模式 1:查找表
“哪个表有顾客信息?” → 使用 list_tables,然后描述 Customer 表
模式 2:理解结构
“Invoice 表中有什么?” → 使用模式工具显示列和示例数据
模式 3:映射关系
“艺术家如何与销售连接?” → 追踪外键链:Artist → Album → Track → InvoiceLine → Invoice
提示
- Chinook 中的表名是单数且首字母大写(Customer,不是 customers)
- 外键通常有“Id”后缀并与表名匹配
- 使用示例数据来理解值的样貌
- 当不确定使用哪个表时,首先列出所有表