从 JSON 到关系型数据库

Entity Enricher 对比 Supabase MCP

数据库可以接受每一次插入,却依然给出错误的采购预算。看看一个放错位置的价格如何破坏产品目录,以及 Entity Enricher 如何将经过审核的身份与关系决策转化为可重复的数据表和更新。

查看示例Database Sync 的工作原理

谁来决定每张表放什么?

使用 Supabase MCP 的智能体

智能体解析你的 JSON 并编写 SQL。Supabase MCP 通过 apply_migration 和 execute_sql 执行这些 SQL。建模、身份标识和重复导入规则必须由你的智能体或应用提供。

Entity Enricher

你审核一份可复用的 Schema,包括键以及共享或父级归属的关系。引擎据此推导出表、约束和结构索引,随后通过同一模型交付后续的数据变更。AI 帮助提出模型,代码负责执行其规则。

本对比针对的是通过 Supabase MCP 基于 JSON 构建的智能体。设计良好的 Supabase 应用同样可以实现这些防护。下方有缺陷的模型只是对建模风险的示例说明,并非 Supabase 的默认行为,也不代表实测失败率。

两个产品。一个供应商。两种不同价格。

这个虚构的目录包含两个产品样本。供应商 SUP-7 以 €12 出售台灯,以 €85 出售书桌。供应商是共享的;价格和交货周期则属于各自的报价。

输入 JSON —— 同一实体类型的两个样本
[
  {
    "sku": "LAMP-01",
    "name": "Reading lamp",
    "offers": [
      {
        "supplier": {
          "supplier_id": "SUP-7",
          "name": "Northstar Supply"
        },
        "unit_cost_eur": 12,
        "lead_time_days": 3
      }
    ]
  },
  {
    "sku": "DESK-02",
    "name": "Writing desk",
    "offers": [
      {
        "supplier": {
          "supplier_id": "SUP-7",
          "name": "Northstar Supply"
        },
        "unit_cost_eur": 85,
        "lead_time_days": 14
      }
    ]
  }
]

在 Entity Enricher 中,这些只是 schema 示例,并非自动数据导入。请检查生成的 schema,将供应商标记为共享、将报价标记为归属父级,然后发布并进行增强或注入匹配的记录。稳定的 SKU 和供应商 ID 为本示例提供身份标识。

外键无法告诉你价格归谁所有

错误映射示例

价格挂在供应商上

product
列与键SQL 类型
skuPKtext
nametext
supplier_idFKtext

product.supplier_id → supplier.supplier_id

supplier
列与键SQL 类型
supplier_idPKtext
nametext
unit_cost_eurnumeric
lead_time_daysinteger

用书桌的报价更新 SUP-7,会覆盖台灯的价格和交货时间。外键是有效的,数据却是错的。这种结构还限定每个产品只能有一个供应商。

采用经过审核模型的 Entity Enricher

每个报价各自保留其事实数据

product
列与键SQL 类型
skuPKtext
nametext
supplier
列与键SQL 类型
supplier_idPKtext
nametext

product 1 → N offer N ← 1 supplier

offer
列与键SQL 类型
product_skuPK / FKtext
supplier_idPK / FKtext
unit_cost_eurnumeric
lead_time_daysinteger

复用同一条供应商记录。每个产品–供应商组合都有各自的价格和交货周期。添加书桌的报价不会影响台灯的报价。

表名和自然键已简化,同步元数据已省略。PK = 主键,FK = 外键。两个报价键共同构成一个复合键。本示例假设每个组合只有一条当前报价;价格历史、币种或数量档位需要额外建模。

看看采购预算如何变化

采购方需要 100 盏台灯。在第一次与第二次导入之间切换,查看每个模型返回的结果。

错误模型:100 盏台灯的预算

€8,500

高估了 €7,300。你的利润率报表和采购预测现在用的是书桌的价格。

经审核的 EE 模型:100 盏台灯的预算

€1,200

台灯的报价仍为 €12,交货周期 3 天。书桌的报价是单独一行记录。

基于示例数据的说明性计算;不涉及数据库调用或实测财务损失。

建表之后你将面对的代价

碎片化的供应商记录

每次导入都生成新的供应商 ID,采购记录便会分散到重复的档案中。支出总额和供应商对比将因此失真。

Entity Enricher

声明稳定键可让重复实体收敛。当标签不一致时,可选的语义 ID 会有所帮助,但匹配结果仍需审核。

供应商查询缓慢,写入冗余

以 product_sku 开头的联结键无法替代以 supplier_id 开头的索引。随着目录增长,反向查找的开销会越来越大。

Entity Enricher

EE 会为其关系生成结构性索引,包括反向联结查找,并避免冗余的前导前缀索引。其他索引请根据你的实际查询进行调优。

新增字段会破坏下游导入

你的 JSON 新增了一个报价字段,目标表或导入 SQL 却没有。新数据要么加载失败,要么永远到不了需要它的报表。

Entity Enricher

已发布的 Schema 同时决定表结构和数据投影。发布前可预览受支持的迁移;不受支持的转换会被阻止。

重试会重复执行任务或覆盖较新的数据

导入后连接中断。若没有重放规则,重试可能产生重复数据;较旧的更新可能覆盖较新的报价。

Entity Enricher

EE 提供有序投递、基于身份的 upsert 以及修订版本保护。PostgreSQL 客户端在一个事务中应用整个批次,并在提交后确认。

增强成功,目录却不完整

模型返回了 JSON,但某条报价缺少必需的键,或目标端拒绝写入。仅凭一条成功提示,可能掩盖缺失的产品和报价。

Entity Enricher

准入策略可能拒绝某个实体,或省略不完整的子实体。EE 会报告部分结果,并单独跟踪副本投递情况,便于你识别需要修复的内容。

每次刷新都会重写整个目录

重写未发生变化的报价会消耗数据库资源、造成不必要的索引维护,并让下游的变更处理产生更多噪声。

Entity Enricher

EE 会检测未发生变化的实体状态,并在值未变化时阻止行更新。消费方可通过增量数据流跟踪变更,包括删除。

仍需你自行判断的部分

发布前请审核身份标识、归属关系以及每个字段的含义。EE 让这些决策可执行,但无法证明你的业务模型是正确的。语义匹配可能出错,查询性能也仍取决于负载和数据库规模。

最新一次增强会替换当前状态:缺失的值可能抹掉先前的值,归属报价列表变短则会删除未列出的报价。如有需要,请单独保留历史记录。部分失败或被拒绝的数据需要更正后重新提交;投递状态并不等于自动修复。

已经在使用 Supabase?

当你希望让智能体检查数据库并编写自定义 SQL 时,Supabase MCP 很有用。当同一份数据契约必须持续产出一致的关系型更新时,EE 更合适。你可以将 Supabase PostgreSQL 用作 EE 同步客户端的目标端,前提是连接和数据库权限允许。应用层的访问策略仍需由你自行配置。

资料来源与对比范围

审核于 2026 年 9 月 10 日。Supabase 提供迁移功能和可标记缺失索引的 Advisors;EE 的不同之处在于从经过审核的增强 Schema 生成并应用规则。