数据连接查询执行和元数据

datomic join query execution and metadata

在 java 中(通过 JDBC 驱动程序)当我对 T1(a, b) 和 T2(x, y) 执行 sql 连接查询时,我得到一个输出包含连接记录 J(a, b, x, y)。除此之外,我还得到元数据,告诉我在连接记录 J 字段中 "a" 和 "b" 来自 table T1,字段 "x" 和 "y" 来自tableT2.

我的问题是,当我在 java 中 运行 数据连接查询时,我是否也得到这种元数据信息,告诉我连接记录中的哪个字段属于哪个输入 table?

Datomic 没有表格。它就像一个三重商店。内置时间轴。

三元组是实体-属性-值。因此,您可以在输出中包含匹配的实体以及属性和值。

例如,在你的数据库中有三元组:

[joe :likes :pizza]
[joe :favorite-color :gray]
[joe :name "joe"]
[jane :likes :pizza]
[jane :favorite-color :blue]
[jane :name "jane"]

joe 和 jane 是实体(它们是具有唯一标识符并附加属性的事物),:likes、:name 和 :favorite-color 是属性,:pizza、:grey 和 :blue 是值。

查找喜欢比萨饼并且喜欢灰色的人的查询

(d/q '[:find ?person
       :where
       [?person :likes :pizza]
       [?person :favorite-color :gray]]
       db)

这里的结果将是一个实体列表,在本例中,只是 joe。您可以从该实体导航到其所有属性(名称、喜好等)。此查询没有太多意义,但您可以 return 任何变量,可以是实体属性或值。

我会在这里停下来,因为 Datomic 有很棒的教程和官方文档。