问题标签 [datalog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
495 浏览

database - 查询的安全数据记录规则

考虑以下关系:edge(X,Y)、Red(X,Y)、Blue(X,Y)。这些关系表示一个图,其边缘可以被着色为红色或蓝色(或无颜色)。

为以下查询提供安全的数据记录规则(必要时使用否定)。

Q1。找到从 X 到 Y 的路径(链接边序列)的节点 X 和 Y 对?

我的尝试:- 可达(X,Y):- 边缘(X,Y)

可达(X,Y):- 边缘(X,Z),可达(Z,Y)

Q2。找到节点 X 和 Y 对,其中存在从 X 到 Y 的均匀长度的路径(一系列连接的边),红色和蓝色交替出现?

我的尝试:

我制作了奇偶数据记录程序和一个红/蓝程序,但不知道如何将两者结合起来以获得偶数长度的交替红/蓝节点

奇数(x,y):- 边缘(x,y)

奇数(x,y):- 边缘(x,z),偶数(z,y)
偶数(x,y):- 边缘(x,z),奇数(z,y)。

路径(X,Y):- 红色(X,Y)

路径(X,Y):- 路径(X,Z),蓝色(Z,W),路径(W,Y)

0 投票
1 回答
323 浏览

database-design - Datomic 中的注释关系

我希望扩展关于这个 SO 问题的对话,并在实施方面获得更多细节。

我的要求包括允许管理员在关系上定义标签,其数量是任意的,所涉及的实体是任意的,并且所涉及的实体不是偶然的(即不是Component实体的一个)。

举一个人为的例子, aUser可以有很多Projects. 一个Project可以有很多Users

管理员创建任意数量的标签以分配给每个关系的相关用户,例如to OwnerContributorVIP等。UserProject

根据我对这个答案的理解,简单ref是不够的,我需要创建一个额外的实体,像这样 -

相关Project属性

相关User属性

相关Association属性

相关Tag属性

这是我所得到的。我不清楚如何以association惯用的 Datomic 方式构建实体。

要查找给定的关联关系Project,包括但不限于Users,以及在哪里查找关系relationship tag = Contributor,我应该

  • 1)删除refson Project+User并通过检索数据Associations?即返回association/related-ents包含的所有关联User-Id = foo

  • 2) 完全不同的东西。

我想我的问题归结为我在哪里存储ref有效查找?是否db.type应该使用不同的来代替string,或者需要不同的构造associationproject/associations甚至user/associations refs是必要的吗?

欣赏任何见解。

更新


经过多一点思考,我想我refs在各种实体上绊倒了。我想知道我是否可以简单地拥有一个associations/relatedEnts本身就是一个包含 2 个 Datomic db ids + 标签的 ref 并删除所有其他列出的 attrs。这是理想的吗?

0 投票
1 回答
62 浏览

datalog - 在 Datalog 中查询唯一性?

是否可以在 Datalog 中为其他变量的每个可能值编写一个事实查询,其中一个变量只有一个值?

例如找到所有这样的,每个X只有一个XYexpr(X, Y)

0 投票
1 回答
392 浏览

datalog - 单独使用Datalog,可以吗?

我目前正在为我的课堂报告学习Datalog,我只需要讨论基本语法和一个基本示例。

我知道 Datalog 通常用作查询语言,并且通常只实现到其他语言,如 Java、Lua、C 等,但是是否可以只教 Datalog 本身,或者我需要使用另一种语言来实现它显示一个简单的工作程序?

0 投票
1 回答
781 浏览

clojure - 我可以将一个实体及其父组件一直拉到组件树上吗?

是否可以将实体和所有组件父级一直拉到树上?

反向递归拉动。

如果没有,我该怎么做?

0 投票
3 回答
230 浏览

clojure - 多次添加相同的数据是否不是最优的?

我目前在我的一个项目中使用 Datomic,一个问题困扰着我。

这是我的问题的简化版本:

  • 我需要解析一个小英文句子列表,并将完整的句子及其单词插入 Datomic。
  • 包含句子列表的文件非常大(> 10 GB)
  • 同一个句子可以在文件中出现多次,它们的词也可以跨句子出现多次
  • 在插入过程中,将设置一个属性以将每个句子与其对应的单词相关联

为了简化插入过程,我很想多次编写相同的数据(即不检查数据库中是否已经存在记录)。但我担心性能影响。

  • 当多次添加相同的 datoms 时,Datomic 会发生什么?
  • 是否值得检查在事务之前已经添加了一个 datom ?

  • 有没有办法防止 Datomic 覆盖以前的 datoms(即如果记录已经存在,则跳过事务)?

谢谢您的帮助

0 投票
1 回答
137 浏览

datalog - 我需要基于两个表创建数据日志查询吗?

以下针对 none_of_manufacturer 的 Datalog 规则旨在列出航空公司在其机队中没有飞机的那些飞机制造商。然而,下面的 Datalog 片段并没有做它打算做的事情。

我可以对上述查询做些什么来解决它?

我想到了一个建议:

你们有什么感想?我附上了下表

更新

我发现了一种可以解决问题的技术。考虑到原始查询返回了不在飞机表中的模型的制造,在这种情况下,对于以下丢失的飞机 (727,737-200,737,500) 和 MD (MD11) 将是 Boing。我们的最终结果是 MD,因为我们没有 MD 平面,所以

0 投票
1 回答
1166 浏览

sqlite - 将 Datalog 查询转换为 SQL(ite) 查询

Datalog是一种用于查询关系数据的可爱语言。它简单、清晰、组合良好,并且支持递归查询,无需额外语法。

SQLite是一个出色的嵌入式数据库,它似乎是一个强大的查询引擎,能够处理递归查询 - 请参阅该页面底部的示例,以生成 Mandelbrot 集并找到 Sudoko 谜题的所有可能解决方案!

我很想知道是否有一种相当标准的方法可以将数据记录查询转换为 SQLite 支持的递归 SQL,或者是否有提供此功能的库。

0 投票
2 回答
2104 浏览

database - Datalog 中的最大值最小值和平均值

我不知道如何使用 Datalog 声明性逻辑编程语言计算平均值、最大值和最小值。

例如。考虑到这个简单的模式

如果我想要

a) 河流的平均长度,

b) 最长的河流,

c) 河流较少的河流

什么是正确的 Datalog 查询?

我已阅读 Datalog 理论,但无法弄清楚如何使用 Datalog 解决这些简单的另一种语言查询,并且没有找到任何类似的示例。

注意
我使用的数据记录具有基本的算术功能,例如、y is z+1或,您可以使用or语句和否定,因此理论上应该可以以某种方式进行这种询问,因为它具有足够的表达能力。y is z-1y is z\1y is z*1X<YY>X

0 投票
3 回答
716 浏览

clojure - 如何使用 datomic 的 pull 方法通过实体 id 抓取实体?

如何pull通过实体 ID 使用该方法检索实体?我已经使用事务向我的数据库添加了一些 datoms/facts(正确的措辞?)。如果我执行以下简单查询,我可以看到实体 ID:

结果是:

{[17592186045418] [17592186045420] [17592186045423]}

现在我想使用pull检索其中之一。但是,拉取文档中的示例使用了相关实体与 id 相关联的示例。

具体来说,文档引用了 musicbrainz 示例数据集中的示例,他们建议的示例是:

(pull db '[*] led-zeppelin)

其中(尽管文档没有显示)led-zeppelin 的定义是这样的(可以在这里看到:

(def led-zeppelin [:artist/gid #uuid "678d88b2-87b0-403b-b63d-5da7465aecc3"])

文档说拉命令需要三件事:一个数据库,一个选择器模式,确定我认为为每个实体提取哪些属性,以及实体的“eid”。所以上面的led-zeppelinvar 在某种程度上是开斋节。

我并不完全了解那里发生的事情。:artist/gid 似乎是在 musicbrainz 的模式中定义的 id 属性,第三项看起来像特定的 id。我不确定#uuid 是什么。

但是,就我而言,我没有为我的实体定义 id 属性。我希望能够使用我认为默认分配给每个实体的唯一实体 ID。这可能吗?如果是这样,这将如何完成?