datalevin db/id vs db/ident



我想使用Datalevin作为我的应用程序的数据库。README提到:db/id作为实体的标识符,我看到这些实体在插入时会得到一个自动递增的整数值。

然而,在源代码中也多次提到:db/ident,例如隐式常量。

这两个关键词的目的是什么?有什么区别?

:db/ident称为实体标识符Datomic。

它们被用来允许更容易的";指向";其他,众所周知事物;就像一个枚举。因此,您可以将枚举值作为基准,但是仍然可以通过关键字引用它们(无需查找每次使用之前(。

例如

(def conn (d/create-conn "./tst" {})) 

(d/transact! conn  
[{:db/id 1, :customer-type/name "Fictional", :db/ident :fictional}
{:db/id 2, :customer/name "ACME", :customer/type :fictional}])   

(d/pull @conn                                                                                         
[:db/id :customer/name {:customer/type [:db/id :customer-type/name]}]
2)  
; ⇒ {:db/id 2, :customer/name "ACME", 
;    :customer/type {:db/id :fictional, 
;                    :customer-type/name "Fictional"}}                     

最新更新