这是" SQL反模式"中的错误吗?本书吗?

时间:2016-01-02 05:20:50

标签: sql database-design tree nested-sets anti-patterns

相关部分:

  

嵌套集。

     

嵌套集解决方案存储每个节点的信息   属于其后代的集合,而不是节点的集合   直接的父母。该信息可以通过编码每个来表示   树中有两个数字的节点,您可以调用nsleft和   nsright

CREATE TABLE Comments ( 
   comment_id   SERIAL PRIMARY KEY, 
   nsleft       INTEGER NOT NULL,
   nsright      INTEGER NOT NULL,
   bug_id       BIGINT UNSIGNED NOT NULL,
   author       BIGINT UNISGNED NOT NULL,
   comment_date DATETIME NOT NULL,
   comment      TEXT NOT NULL,
   FOREIGN KEY  (bug_id) REFERENCES Bugs (bud_id),
   FOREIGN KEY (author) REFERENCES Accounts(account_id)
);
     

以下列方式为每个节点提供nsleftnsright个数字:   nsleft数小于所有节点的数量   孩子,而正确的数字大于所有人的数字   节点的孩子。这些数字与此无关   comment_id值。

(SQL Anti-Patterns第32页)

不应该说

  

nsleft数小于所有节点的数量    后代 ,而正确的数字大于数字   所有节点的 后代

或者我对这个概念的理解有缺陷吗?

1 个答案:

答案 0 :(得分:1)

我认为这不是一个错字,但你也是正确的,它适用于后代,所以你了解情况 - 你只是没有完全考虑到它。

假设树有3个级别。对于最低叶级别的每个节点,没有子节点。在中间级别,每个节点的nsleft小于其任何子节点(叶节点)的最小nsleft,并且nsright小于最大nsright它的任何一个孩子。同样,在顶层,单个根节点的nsleft小于其任何直接子节点的最小nsleft,并且nsright大于最大nsright任何直接的孩子。但是,通过归纳,这意味着根节点的nsleft节点小于其任何后代的最小nsleft,并且其nsright节点大于最大nsright节点任何后代。

因此,该陈述书写得很准确,但您的推断也是正确的。