You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GraphQL FaunaDB中通过Schema为多字段创建联合唯一索引

解决FaunaDB GraphQL Schema中联合唯一约束的问题

你遇到的问题其实是对@unique注解的用法理解有点偏差——直接给两个字段都加@unique(index: "...")是行不通的,因为@unique默认是针对单个字段的约束,这种写法只会让第一个字段(也就是promo)关联到你指定的索引,第二个字段不会被纳入联合唯一性检查。

要实现promo和variable的联合唯一约束,你需要先定义一个联合唯一索引,再把它和你的实体类型关联起来,具体有两种写法:

方法一:显式定义联合索引 + 实体类型

# 第一步:创建联合唯一索引,指定要联合的两个字段,并开启unique属性
index unique_promo_variable {
  source: PromoTemplateVariable
  terms: [
    { field: ["data", "promo"] },
    { field: ["data", "variable"] }
  ]
  unique: true
}

# 第二步:定义实体类型,确保两个关联字段为必填项即可,无需再给单个字段加@unique
type PromoTemplateVariable {
  promo: Promo!
  variable: TemplateVariable!
  value: String!
}

方法二:类型级别绑定联合索引(更简洁)

# 先定义实体类型,用@unique注解绑定到后续的联合索引
type PromoTemplateVariable @unique(index: "unique_promo_variable") {
  promo: Promo!
  variable: TemplateVariable!
  value: String!
}

# 再定义对应的联合唯一索引
index unique_promo_variable {
  source: PromoTemplateVariable
  terms: [
    { field: ["data", "promo"] },
    { field: ["data", "variable"] }
  ]
  unique: true
}

注意事项

  • 部署这个Schema之前,如果你已经在FaunaDB里创建了只包含promo字段的旧索引,一定要先删除它,避免新旧索引冲突导致部署失败。
  • 当你部署成功后,unique_promo_variable索引会强制promo和variable的组合值唯一,任何重复的组合都会被FaunaDB拒绝。

内容的提问来源于stack exchange,提问作者Lenik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:09:07