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

关于Datalevin中:db/id与:db/ident的用途及差异的技术咨询

:db/id 和 :db/ident 在 Datalevin 中的用途与差异

:db/id 的用途

  • 是实体的唯一数值标识符,插入实体时默认自动生成自增整数,也可以手动指定不冲突的数值
  • 是所有实体的必备字段,用于数据库内部唯一定位实体,后续的查询、更新、关联操作都依赖它来精准定位目标实体
  • 示例:插入{:user/name "Alice"}时,Datalevin会自动为其添加:db/id 1字段,后续可通过[:find ?n :where [1 :user/name ?n]]查询该用户的名称

:db/ident 的用途

  • 是实体的语义化标识,通常设为关键字类型(比如:role/admin),用于给实体赋予业务层面的可读名称
  • 主要用于定义系统常量、枚举类或需要通过语义名称快速访问的实体,比如角色类型、系统配置项这类不常变更的实体
  • 示例:插入{:db/ident :role/admin, :role/description "系统管理员"}后,可直接通过[:find ?d :where [?e :db/ident :role/admin] [?e :role/description ?d]]查询该角色的描述,无需记忆对应的:db/id数值

二者核心差异

  • 类型与生成逻辑::db/id是整数类型,默认自动自增生成,也支持手动指定;:db/ident是关键字/字符串类型,必须手动显式设置
  • 必要性与唯一性::db/id是所有实体的必填字段,全局唯一;:db/ident是可选字段,但一旦设置就必须保证全局唯一(不能有两个实体共用同一个:db/ident)
  • 使用场景::db/id侧重数据库内部的实体定位、关联操作;:db/ident侧重业务代码中的语义化引用,让代码更易读、易维护,避免依赖无意义的数值id
  • 稳定性::db/id一旦生成就固定不可变;:db/ident理论上可以修改,但不建议这么做——因为业务代码通常直接引用:db/ident的语义值,修改会导致代码逻辑失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:31:17