问题标签 [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.
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)
database-design - Datomic 中的注释关系
我希望扩展关于这个 SO 问题的对话,并在实施方面获得更多细节。
我的要求包括允许管理员在关系上定义标签,其数量是任意的,所涉及的实体是任意的,并且所涉及的实体不是偶然的(即不是Component
实体的一个)。
举一个人为的例子, aUser
可以有很多Projects
. 一个Project
可以有很多Users
。
管理员创建任意数量的标签以分配给每个关系的相关用户,例如to Owner
、Contributor
、VIP
等。User
Project
根据我对这个答案的理解,简单ref
是不够的,我需要创建一个额外的实体,像这样 -
相关Project
属性
相关User
属性
相关Association
属性
相关Tag
属性
这是我所得到的。我不清楚如何以association
惯用的 Datomic 方式构建实体。
要查找给定的关联关系Project
,包括但不限于Users
,以及在哪里查找关系relationship tag = Contributor
,我应该
1)删除
refs
onProject
+User
并通过检索数据Associations
?即返回association/related-ents
包含的所有关联User-Id = foo
2) 完全不同的东西。
我想我的问题归结为我在哪里存储ref
有效查找?是否db.type
应该使用不同的来代替string
,或者需要不同的构造association
?project/associations
甚至user/associations
refs
是必要的吗?
欣赏任何见解。
更新
经过多一点思考,我想我refs
在各种实体上绊倒了。我想知道我是否可以简单地拥有一个associations/relatedEnts
本身就是一个包含 2 个 Datomic db ids + 标签的 ref 并删除所有其他列出的 attrs。这是理想的吗?
datalog - 在 Datalog 中查询唯一性?
是否可以在 Datalog 中为其他变量的每个可能值编写一个事实查询,其中一个变量只有一个值?
例如找到所有这样的,每个X
只有一个X
Y
expr(X, Y)
datalog - 单独使用Datalog,可以吗?
我目前正在为我的课堂报告学习Datalog,我只需要讨论基本语法和一个基本示例。
我知道 Datalog 通常用作查询语言,并且通常只实现到其他语言,如 Java、Lua、C 等,但是是否可以只教 Datalog 本身,或者我需要使用另一种语言来实现它显示一个简单的工作程序?
clojure - 我可以将一个实体及其父组件一直拉到组件树上吗?
是否可以将实体和所有组件父级一直拉到树上?
反向递归拉动。
如果没有,我该怎么做?
clojure - 多次添加相同的数据是否不是最优的?
我目前在我的一个项目中使用 Datomic,一个问题困扰着我。
这是我的问题的简化版本:
- 我需要解析一个小英文句子列表,并将完整的句子及其单词插入 Datomic。
- 包含句子列表的文件非常大(> 10 GB)
- 同一个句子可以在文件中出现多次,它们的词也可以跨句子出现多次
- 在插入过程中,将设置一个属性以将每个句子与其对应的单词相关联
为了简化插入过程,我很想多次编写相同的数据(即不检查数据库中是否已经存在记录)。但我担心性能影响。
- 当多次添加相同的 datoms 时,Datomic 会发生什么?
是否值得检查在事务之前已经添加了一个 datom ?
有没有办法防止 Datomic 覆盖以前的 datoms(即如果记录已经存在,则跳过事务)?
谢谢您的帮助
datalog - 我需要基于两个表创建数据日志查询吗?
以下针对 none_of_manufacturer 的 Datalog 规则旨在列出航空公司在其机队中没有飞机的那些飞机制造商。然而,下面的 Datalog 片段并没有做它打算做的事情。
我可以对上述查询做些什么来解决它?
我想到了一个建议:
你们有什么感想?我附上了下表
更新
我发现了一种可以解决问题的技术。考虑到原始查询返回了不在飞机表中的模型的制造,在这种情况下,对于以下丢失的飞机 (727,737-200,737,500) 和 MD (MD11) 将是 Boing。我们的最终结果是 MD,因为我们没有 MD 平面,所以
database - Datalog 中的最大值最小值和平均值
我不知道如何使用 Datalog 声明性逻辑编程语言计算平均值、最大值和最小值。
例如。考虑到这个简单的模式
如果我想要
a) 河流的平均长度,
b) 最长的河流,
c) 河流较少的河流
什么是正确的 Datalog 查询?
我已阅读 Datalog 理论,但无法弄清楚如何使用 Datalog 解决这些简单的另一种语言查询,并且没有找到任何类似的示例。
注意
我使用的数据记录具有基本的算术功能,例如、y is z+1
或,您可以使用or语句和否定,因此理论上应该可以以某种方式进行这种询问,因为它具有足够的表达能力。y is z-1
y is z\1
y is z*1
X<Y
Y>X
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-zeppelin
var 在某种程度上是开斋节。
我并不完全了解那里发生的事情。:artist/gid 似乎是在 musicbrainz 的模式中定义的 id 属性,第三项看起来像特定的 id。我不确定#uuid 是什么。
但是,就我而言,我没有为我的实体定义 id 属性。我希望能够使用我认为默认分配给每个实体的唯一实体 ID。这可能吗?如果是这样,这将如何完成?