I have some experience with Neo4j / cypher. In cypher relationships are first-class citizens, so they can have properties, which I really like.
I’m very new to datomic / datalog, sorry in advance if I’m asking a dumb question… How do I do something similar with datomic? Or do I simply approach the problem from a wrong perspective and should learn a new way of thinking about this?
Very briefly: in Datomic, a typical approach is to have one entity for each edge. You mind want to have a attribute named, say, :myapp.persons-pair/person-id-1+2
, defined as a composite of the Entity IDs of both participants:
[{:db/ident :myapp.persons-pair/person-entid1+entid2
:db/valueType :db.type/tuple
:db/tupleAttrs [:myapp.persons-pair/person-1
:myapp.persons-pair/person-2]
:db/cardinality :db.cardinality/one
:db/unique :db.unique/identity}
{:db/ident :myapp.persons-pair/person-1
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one}
{:db/ident :myapp.persons-pair/person-2
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one}
{:db/ident :myapp.persons-pair/met-at-instant
:db/valueType :db.type/instant
:db/cardinality :db.cardinality/one}]