数据记录分层

Posted

技术标签:

【中文标题】数据记录分层【英文标题】:Datalog Stratification 【发布时间】:2012-09-04 23:27:40 【问题描述】:

所以我试图了解 Datalog 的工作原理,它与 Prolog 之间的区别之一是它在否定和递归上具有分层限制。 引用***:

如果谓词 P 是从谓词 Q 肯定派生的(即 P 是 规则的头部,并且 Q 积极地出现在同一规则的主体中 规则),则 P 的分层数必须大于或 等于Q的分层数

如果谓词 P 是从否定谓词 Q 派生的(即 P 是 规则的头部,并且 Q 在同一规则的主体中出现否定), 那么 P 的分层数必须大于 Q的分层数,

因此,这样一来,以下两个谓词不会导致分层错误,因为它们可以简单地分配相同的分层编号。所以这些谓词很好,尽管是循环定义。

    A(x) :- B(x) B(x) :- A(x)

但是,如果我们有一个包含一些否定的定义(其中 ~ 是否定),则会发生这种情况

    A(x) :- ~ B(x) B(x) :- ~ A(x)

在这里分层是不可能的。 A(x,y) 的分层数必须大于 B(x,y),B(x,y) 的分层数必须大于 A(x,y)。我的第一个想法是这不好,因为这是一个循环定义,但只要谓词不被否定,分层就可以循环。但为什么?真值只是二进制的。以这种方式对具有否定符号的公式进行不同的处理似乎是非常武断的。在第二种情况下,这种分层试图防止在第一种情况下是什么?

【问题讨论】:

【参考方案1】:

我认为问题在于:

A(x) :- \+ B(x)

B(x) :- \+ A(x)

...是它具有模棱两可的语义。该程序有两个最小模型,即A(x)B(x),因此在定点语义(无定点)或模型理论语义(没有唯一的最小模型)。

为了解决这个问题,Datalog 的分层语义对 Datalog 程序的语法施加了限制,这样,如果程序存在 分层,那么它将在不动点和模型理论语义中也有一个独特的最小模型(反之亦然,我相信)。

您可以在文本“Serge Abiteboul、Richard Hull 和 Victor Vianu 的数据库基础”中找到有关 Datalog 分层语义的详细信息的更多信息,该文本恰好免费提供 online ,相关细节在Chapter 15。如果您遇到困难,这篇出色的文字还解释了我在上面使用的大多数其他术语,例如模型、定点等。

【讨论】:

以上是关于数据记录分层的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Oracle 11g 中分层表的每条记录分配父组 ID?

pyspark - 如何在分层随机抽样中使用(df.sampleByKey())选择每层的确切记录数

以高写入负载在 MySQL 中存储分层数据

工作总结:mvc分层架构

添加新记录按钮在剑道分层网格中不起作用

大数据面试题记录