之前在 Day25 討論主鍵的設定有談到:可以視 Datomic 是一種高階資料庫,因為它讓使用者可以不用花心力去思考主鍵如何設計,把心力專注於業務邏輯 (business rule) 之上。
在索引 (index) 這部分,Datomic 也一樣提供了高階的語意。Datomic 有四種索引,其中有三種是全自動產生的。只有一種 AVET 需要在欄位綱要需要使用者去主動設定 :db/index
才會產生。
四種索引分別是:
其中,EAVT 與 AEVT 包含了資料庫裡所有的資料原子 (datom)。AEVT 只包含欄位綱要中有設定 :db/index true
的資料原子。 VAET 只包含欄位綱要的資料型別為 :db.type/ref
的資料原子,VAET 用於反向查詢。
舉個例子,像下方的這個 :order/customer-id
欄位綱要,它就會產生 AVET 索引,而這個索引也是最接近於傳統 SQL 資料庫索引的索引語意。
{:db/ident :order/customer-id
:db/valueType :db.type/uuid
:db/index true
:db/cardinality :db.cardinality/one}
:db/index true
才會產生。