1. 引言:多表关联——Text-to-SQL的核心难点
在真实世界的数据库中,数据往往被规范化地存储在多个相互关联的表中,以减少冗余并保持数据一致性。例如,一个电商数据库可能包含订单表 (Orders)
、客户表 (Customers)
、产品表 (Products)
、订单详情表 (OrderItems)
等。
当用户提出这样的问题时,就必然涉及到多表关联:
- “查找购买了‘iPhone 15’的客户姓名和他们的订单日期。” (涉及
Customers
,Orders
,OrderItems
,Products
表) - “统计每个产品类别在过去一个月的总销售额。” (涉及
Products
,OrderItems
,Orders
表)
这些查询需要Agent不仅理解每个表的内容,还要理解它们之间是如何通过主键(Primary Key, PK)和外键(Foreign Key, FK)联系起来的,并能生成正确的JOIN
子句。这无疑是Text-to-SQL任务中最具挑战性的部分之一,堪称该领域的“珠穆朗玛峰”。