Accumulate
More Schema
Our stakeholders have a new request. Now it isn't just an inventory database, it also needs to track orders:
- An order is a collection of line items
- Each line item has a count and references an item in the inventory
We can model this directly in Datomic schema without translation:
noslide
(def order-schema [{:db/ident :order/items :db/valueType :db.type/ref :db/cardinality :db.cardinality/many :db/isComponent true} {:db/ident :item/id :db/valueType :db.type/ref :db/cardinality :db.cardinality/one} {:db/ident :item/count :db/valueType :db.type/long :db/cardinality :db.cardinality/one}]) (d/transact conn {:tx-data order-schema})
=> ;; transaction result map
Note that:
:db.cardinality/many
allows a single order to have multiple:order/items
:db/isComponent
true
tells Datomic that order items belong to an order
More Data
Now let's add a sample order:
noslide
(def add-order {:order/items [{:item/id [:inv/sku "SKU-25"] :item/count 10} {:item/id [:inv/sku "SKU-26"] :item/count 20}]}) (d/transact conn {:tx-data [add-order]})
result ;; tx result map
In this example a nested entity map is displayed. The top level is the order, which
has multiple :order/items
nested within.
With this data in hand, let's explore some more features of query.