小编Rev*_*ica的帖子

如何使用初始空的 B+ 树的键输入记录?

显示按(1, 2, 3, 4, 5)的顺序输入带有键的记录到一个初始为空的B+-阶m = 3的树的结果。 如果溢出,将节点拆分,不要重新分配邻居的钥匙。是否可以以不同的顺序使用键输入记录以获得较低高度的树?

来自Relational DBMS Internals,第 5 章:动态树结构组织,第 50 页

我不擅长这个但我尝试过吗?左侧和 > 右侧:

直到插入 1,2 :

在此处输入图片说明

然后,就我们必须拆分节点而不是将密钥重新分配给邻居(我将其理解为子节点)而言,我只在单元格的右侧插入了 2 :

在此处输入图片说明

我在插入 5 时继续做同样的事情:

在此处输入图片说明

但这很奇怪,我从未见过这样的空节点......而且我不知道它是否尊重一些非常基本的 B 树属性:

  • 每个节点最多有(m-1) 个键,至少有(?(m/2)?-1) 个键,除非一个键可以为空,我会将键理解为“指针”。

第一次尝试:订单上的错误显示一棵不明确的树

一开始我误解了“顺序”是什么(每个节点的最大子节点数)。所以我认为一个节点可以有三个空间(因此有 4 个孩子。我正在创建一个 4 阶树,我认为:

直到插入 1,2,3 :

在此处输入图片说明

插入 4,只要我们必须拆分节点而不是将密钥重新分配给邻居(这似乎是矛盾的),我会让 1,2,3 和 4,5 在 3 之后的右叶上:

插入 4 & 5 后的 3 阶 B 树

btree

11
推荐指数
1
解决办法
918
查看次数

在给定 UML 图中未指定的表之间创建关系

晚上好!

我正在从以下 UML 类图(不幸的是法语)设计我的第一个实际数据库:

数据库的UML描述

我正在创建它的关系草图,我是这样创建的:

关系图式

然而,当试图向数据库询问哪些客户从未订购过第一产品时,它会产生一些问题

确实,我不知道如何在 SQL 中做到这一点,因为ClientCommandeProduit之间似乎没有关系。它给出了以下sql代码:

CREATE TABLE Client (
IDClient INT NOT NULL,
AdresseClient VARCHAR(255)NOT NULL ,
NomContact VARCHAR(255)NOT NULL,
NumeroSIRET VARCHAR(14) NOT NULL,
CONSTRAINT cclient PRIMARY KEY (IDClient)
);

CREATE TABLE Produit (
IDProduit INT NOT NULL  ,
PrixVente INT NOT NULL ,
QuantiteEnStock INT NOT NULL ,
CONSTRAiNT cproduit PRIMARY KEY (IDProduit)
) ;

CREATE TABLE Commande (
IDNumeroCde INT NOT NULL  ,
Date DATE …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design relational-theory relational-algebra relational-calculus

5
推荐指数
1
解决办法
1997
查看次数

可以用三级 B 树索引的最大记录数是多少?B+树?

我正在学习动态树结构组织以及如何设计数据库。

考虑具有以下特征的 DBMS:

  • 大小为 2048 字节的文件页
  • 12 字节的指针
  • 56 字节的页头

二级索引定义在 8 字节的页面上。可以用三级 B 树索引的最大记录数是多少?并且具有三级 B+树?

以下是这些树的两个示例:

B树

B+树

我的尝试

B+树

我读过那个

B+树比B树。因为除了最后一个之外,每个叶节点中只有表示为k最高键的集合存储在非叶节点中,组织为 B 树。关系 DBMS 内部,第 5 章:动态树结构组织,第 46 页

因此有一个区别,我们存储在 B 树的节点中的东西存储在 B+ 树的叶子中。因此,在我看来,它是(m-1) hm是顺序,h是高度),因为每个节点最多包含另一个节点的 (m-1) 个键。但这与字节数无关。

然而我在上面提到的书中找到了下表:

树的最小最大高度根据页面的大小

因此它会是 20 3.7条记录吗?

B树

对于他们来说,只要有一些值存储在节点中,我就必须除以节点数。而我被困在那里。

index tree database-size btree max

5
推荐指数
1
解决办法
3432
查看次数

在关系代数中,连接运算的三个等式是否合法?

让是以下数据库:

Film(Title,Director,Actor)
Produce(Producer,Title)
Run Code Online (Sandbox Code Playgroud)

用关系代数表达以下问题:

哪些演员至少制作了一部电影?
哪些演员制作了他们导演的每部电影?

  • 对于第一个问题,它让我想到一个问题,因为我在 join 操作上有三个相等,我不知道它是否合法。

如果是这样,我会尝试以下方法:

? 演员(电影)?(制片人=演员=导演)?制作人(制作)

但我不确定这是关系代数中真正的连接操作。

  • 对于第二个,我尝试了完全不同的东西:

    ? 演员(电影)÷? 导演(电影)÷? 制作人(制作)

对评论的回应:

  • 一部电影可能有多个演员。
  • 对于有多个演员的电影,关系Film中有多行
  • 一个导演可以或不可以,也是一个演员在同一个电影

relational-theory

4
推荐指数
1
解决办法
170
查看次数