EDBT 2026 · Experiments & Analyses · Schema Linking

让 LLM 先找对表和字段

这篇论文回答的是一个很工程的问题:用户问完一句话后,LLM 到底能不能先判断需要哪些表、哪些字段,再交给 Text-to-SQL 写 SQL?作者没有发明一个花哨大模型,而是把 few-shot、问题拆解、微调、规则修正、schema enrichment 逐项实验,告诉我们哪些做法真的有用。

论文:In-depth Analysis of LLM-based Schema Linking 出处:EDBT 2026 数据集:Spider + BIRD 代码:IBM/few-shot-schema-linking
What it does

它做的事:研究 LLM 能不能可靠地“先找字段”。

schema linking 就是把用户问题里的意思,落到数据库里的表和字段。比如“哪些病人的白细胞水平正常”,系统要先找到病人表、检验表、白细胞字段、病人 ID/检验 ID 这些连接字段,以及“正常白细胞水平”的范围说明。只有这一步做稳,后面的 SQL 才有机会写对。

它不是直接写 SQL

论文把问题拆成前处理任务:先识别相关 tables 和 columns,再把这些 schema 交给 Text-to-SQL 模型。

它比较多种做法

作者把 few-shot、question decomposition、supervised fine-tuning、prediction refinement、schema enrichment 放在统一流程里测试。

它关注真实取舍

最重要的结论是:recall 比 precision 更关键。漏掉关键字段基本必错,多给几个字段通常还有补救空间。

92.04%
BIRD best recall

Codestral-22B few-shot + question decomposition 在 BIRD 上达到最高 schema linking recall。

97.48%
Spider best few-shot recall

DeepSeek-Coder-33B few-shot 在 Spider 上 recall 很高,说明 schema linking 不一定非要超大模型。

+26.33%
Refinement recall boost

在 BIRD 上,规则修正平均把 recall 从 43.07 提升到 69.40,说明数据库规则很有价值。

Schema linking example
论文 Figure 1:schema linking 的任务示例。蓝色列和红色表是生成 SQL 所需元素。
Pipeline

统一 pipeline:让 LLM 输出 JSON,再做数据库知识修正。

作者没有把 schema linking 当作“让模型自由解释”的任务,而是要求模型输出可解析的 JSON:`tables` 和 `columns`。输入包括任务说明、DB schema、自然语言问题、hint/evidence,以及从数据库值里 BM25 匹配到的 matched values。

1

Prompt

说明只做 schema linking,不生成 SQL。

2

Schema

提供表、列、类型、主外键、样例值或描述。

3

NLQ + Hint

问题本身,以及 BIRD 中的 domain evidence。

4

Matched Values

从库值中找和问题词面相似的值,辅助字段定位。

5

JSON + Refinement

解析输出,并补上表归属、外键连接等数据库逻辑。

Schema linking pipeline
论文 Figure 2:few-shot schema linking pipeline。它非常适合改造成 MCP 工具链。
{
  "tables": ["patient", "laboratory"],
  "columns": [
    "patient.diagnosis",
    "patient.id",
    "laboratory.id",
    "laboratory.wbc"
  ]
}
Five tested methods

论文重点测试了五类做法:每一种都在处理“找全字段”和“减少噪声”的取舍。

1. few-shot prompting

给 LLM 看几个 schema linking 示例,让它学会:输入是用户问题和数据库 schema,输出是需要的表和字段 JSON。

好处:不用训练模型,迁移到新数据库比较方便。
代价:示例选得不好时,模型可能漏字段或输出格式不稳定。

2. question decomposition

把复杂问题拆成几个简单子问题,分别做 schema linking,最后把每个子问题找到的表和字段合并。

好处:更容易找全字段,recall 通常上升。
代价:合并结果会带来更多无关字段,precision 通常下降。

3. supervised fine-tuning

用已有问题和 gold schema links 微调模型,让它专门学习“哪些字段该被选中”。

好处:输出更克制、更精准,precision 通常上升。
代价:模型可能变保守,漏掉一些必要字段,recall 可能下降。

4. prediction refinement

不完全相信 LLM 的原始输出,而是用数据库规则自动修正:修拼写、补所属表、补 join 中间表、补主键/外键列。

好处:把 LLM 不擅长的关系数据库结构逻辑补上,recall 提升很明显。
代价:可能引入少量额外字段。

5. schema enrichment

挑战“只给 SQL 必需最少字段就是最好”的假设,适当多给一些能代表表含义的字段,帮助 LLM 理解表的整体语义。

好处:部分 SQL 生成模型会因此表现更好。
代价:不是所有模型都受益,需要控制额外字段数量。

一句话记法

few-shot 教格式,decomposition 提召回,fine-tuning 提精度,refinement 补数据库逻辑,enrichment 给模型更多表语义。

Database intelligence

LLM 会懂语义,但经常忽略关系数据库的结构规则。

这篇论文很实用的一点,是把 LLM 输出后的修正规则讲清楚。它们不是复杂模型,却能明显提高 recall,尤其是 foreign key columns 和 junction tables。

Refinement 解决什么问题 对工程实现的启发
Approximate String Matching 模型生成拼写错误或近似列名。 用 RapidFuzz 或编辑距离把幻觉字段映射到真实字段,但要设阈值。
Table Membership 预测了 column,却漏掉所属 table。 任何 `table.column` 都自动补充 table 到 linked schema。
Foreign Key Path 漏掉多对多中间表或连接路径。 用 schema graph 找 predicted tables 之间的最短 FK 路径,补 junction tables。
FK Connection 预测了表,但漏掉 join 所需外键列。 一旦两个表需要 join,自动补主键/外键列,减少 SQL 生成失败。
Foreign key path refinement
论文 Figure 3:模型预测了 author/book/genre,但还要补 book_author 才能 join。
Refinement ablation
论文 Table 4:FK Connections 是影响最大的 refinement 步骤。
Question decomposition

拆问题通常提升 recall,但会降低 precision。

复杂问题经常在一句话里混合多个条件、指标和实体。论文发现 question decomposition 能让模型更容易覆盖所有字段,但因为会合并多个子问题的 schema linking 结果,所以也会带来更多噪声。

Question decomposition example
论文 Figure 4:把复杂问题拆成多个不可再拆的子问题,然后对每个子问题分别做 schema linking。
对智能问询系统来说,这意味着我们可以把“提高召回”和“控制噪声”拆开做:先用 decomposition 尽量找全,再用 refinement、权限、字段类型、SQL dry-run 去收敛。
Results

实验把几个关键取舍讲得很清楚。

设置 Spider Precision Spider Recall BIRD Precision BIRD Recall 结论
Codestral-22B Few-shot72.3797.2967.9386.11强 few-shot 基线。
Codestral-22B Few-shot + QD56.2396.5145.3592.04BIRD recall 最强,但噪声增加。
DeepSeek-Coder-6.7B SFT81.6493.3279.7975.03fine-tuning 提升 precision。
DeepSeek-Coder-6.7B SFT + QD67.0396.4266.0284.09更平衡,适合产品化。
Prel-SQL DeepSeek-33B76.5991.4881.6759.51精度高但 recall 不稳。

Takeaway 1

大模型通常更好,但小型 code-oriented specialist model 很有竞争力,尤其 fine-tune 后。

Takeaway 2

Question Decomposition 提高 recall、降低 precision;SFT 提高 precision、降低 recall;两者结合更平衡。

Takeaway 3

schema linking 越好,Text-to-SQL 通常越好,其中 recall 的影响明显大于 precision。

Takeaway 7

多采样输出并取 union 可以提高 recall,但会降低 precision,适合在高召回模式中使用。

Schema linking performance table
论文 Table 2:Spider 与 BIRD 上不同模型和设置的 schema linking precision/recall。
Impact of schema linking on Text-to-SQL
论文 Figure 7:schema linking 与 Text-to-SQL execution accuracy 的关系,recall 的影响更突出。
Demonstrations and sampling
论文 Figure 10/11:few-shot demonstrations 和多采样输出对 precision/recall 的影响。
Schema enrichment

它还挑战了一个常见假设:oracle schema 不一定最优。

传统 schema linking oracle 只包含 SQL 必需的最小字段。但作者发现,适当加入额外字段可以帮助 LLM 理解表的整体语义,部分模型的 Text-to-SQL 结果会超过最小 oracle。

$$S_{enriched} = S_{oracle} \cup S_{context}$$

这里的 \(S_{context}\) 不是随便加列,而是按 diversity 或 representativeness 选择能代表表语义的字段。

Diversity

从 column embedding 空间里找和已选字段语义距离较远的列,让表表示覆盖更多概念。

Representation

用采样或聚类选出能代表表结构的典型列,让模型更容易理解这个表是什么。

Schema enrichment table
论文 Table 3:schema enrichment 对 oracle 和预测 schema links 的影响,不同 SQL 生成模型受益不同。
For DataEngine

这篇论文可以直接转成你的 skill + MCP 查询前处理层。

和 AutoLink 相比,这篇更像“schema linking 工程手册”。它告诉我们:不要只依赖 LLM 一次性输出字段,要给输出加结构化约束、数据库规则修正、复杂问题拆解和可控 enrichment。

recommended pipeline:
1. parse_question_intent(question)
2. decompose_question(question)               # optional, high-recall mode
3. link_schema_json(question, schema_context)
4. normalize_schema_names(predictions)        # fuzzy matching
5. complete_table_membership(predictions)
6. complete_fk_paths(predictions, schema_graph)
7. add_fk_connection_columns(predictions)
8. enrich_schema_context(predictions)         # optional, model-dependent
9. verify_query_plan_or_draft_sql(predictions)
10. generate_sql_or_mcp_query_action()
模块 建议 MCP/Skill 能力 原因
结构化输出`link_schema(question) -> JSON`避免自然语言输出难解析。
值匹配`search_values(query_terms)`把问题里的实体值映射到具体列。
Schema Graph`find_join_path(tables)`补中间表和外键列。
Refinement`normalize_columns(predicted_columns)`修正拼写、别名、近似列名。
验证`dry_run_query(draft_sql)`在生成最终答案前发现缺字段或 join 错误。
一个务实建议:默认模式用 fine-tuned 或 strict few-shot 保持 precision;当用户问题复杂、字段不确定或 SQL dry-run 失败时,再打开 decomposition + multi-sampling 的高召回模式。
Reviewer-style critique

这篇论文的价值在于清晰实验,不在于炫技。

强项

统一 pipeline 公平比较多种 LLM、few-shot、SFT、QD 和 refinement;并明确展示 schema linking 如何影响 Text-to-SQL。

工程价值

它把很多“系统里该有但论文常省略”的细节讲出来:JSON 解析、fuzzy matching、表归属、FK 路径、样例值匹配。

局限

它还是基于 Spider/BIRD 做实验,真实企业库里的注释缺失、权限、脏字段名、业务口径冲突会更复杂。

和 AutoLink 的关系

AutoLink 更偏 agentic exploration;这篇更偏 schema linking 组件分析。两者结合,正好形成可落地方案。