En utilisant Datomic, j'essaie de penser à comment puis-je imbriquer une liste dans une liste? Un exemple de structure de données Clojure serait quelque chose (voir , figure 1). Je sais que Datomic a la notion de références (ex: fig.2). Mais ceux-ci ressemblent à des types scalaires, pas à des objets (en soi).Imbrication de structures avec Datomic
[{:id 0,
:symbol DDD,
:company 3D Systems Corporation,
:price-difference 1.3100000000000023,
:event-list [{high 35.11,
tickerId 0,
WAP 34.491,
open 35.07,
date 20130426,
count 3403,
low 33.8,
hasGaps false,
close 34.53,
field historicalData,
volume 8667,
type historicalData}]}]
fig.1
{:db/id #db/id[:db.part/db]
:db/ident :district/region
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "A district region enum value"
:db.install/_attribute :db.part/db}
;; district/region enum values
[:db/add #db/id[:db.part/user] :db/ident :region/n]
[:db/add #db/id[:db.part/user] :db/ident :region/ne]
[:db/add #db/id[:db.part/user] :db/ident :region/e]
[:db/add #db/id[:db.part/user] :db/ident :region/se]
[:db/add #db/id[:db.part/user] :db/ident :region/s]
[:db/add #db/id[:db.part/user] :db/ident :region/sw]
[:db/add #db/id[:db.part/user] :db/ident :region/w]
[:db/add #db/id[:db.part/user] :db/ident :region/nw]
fig.2
[EDIT]
En fait, je pense que je pourrais avoir trouvé la réponse here. Je passais par la base de code Day-Of-Datomic, et j'ai trouvé l'exemple ci-dessous. Mais je ne suis toujours pas clair sur ce qui lie explicitement la : commentaires espace de noms à la : commentaire/body (ou : commentaire/auteur) espace (s). Est-ce que Datomic utilise simplement la convention pour lier : commentaires à : comment?
;; comments
[{:db/id #db/id[:db.part/db]
:db/ident :comments
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many
:db/isComponent true
:db.install/_attribute :db.part/db}
{:db/id #db/id[:db.part/db]
:db/ident :comment/body
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db}
{:db/id #db/id[:db.part/db]
:db/ident :comment/author
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db}]
fig.1
Rien ne lie: commentaires et: commentaire/corps. C'est juste une convention de nommage. Pour un exemple de la façon de conserver une liste de listes, voir ma réponse ci-dessous. J'ai utilisé deux définitions d'attributs aléatoires pour conserver l'équivalent de [["a" "b" "c"] ["d" "e" "f"]] dans Clojure. – a2ndrade