2010-05-08 62 views
0

假設有一個文件包含未排序的學生信息列表,其中包含學生ID號以及其他信息。B-樹中的輔助鍵

我想製作一個程序,根據學生ID號檢索學生信息。爲了使效率更高,我將學生ID存儲在B樹中。

所以當我輸入學號時,它會搜索B樹來查看它是否存在。它還做了一件事。如果它找到學生的身份證號碼,那麼它也會返回文件中學生信息所在的位置。這是輔助鍵。該程序使用此信息來查找學生信息的其餘部分並將其打印到屏幕上。

可以這樣做嗎?這是一個B型樹如何工作?

回答

1

B樹通過存儲對鍵值的值來工作,並允許您在對數時間內找到給定的鍵及其關聯值。所以第二件事不叫輔助鍵,它只是價值。在這種情況下,它是一個文件的偏移量,它實際上是一個指向值的指針。

這是使用B樹的完全合理和非常普遍的方式。

1

你所描述的與B樹無關(順便說一句,你確定你明白B-tree是什麼?許多人將它們與二叉樹混淆),並且文件位置不是「二級密鑰」 ,這是學生ID映射到的值。

但是,關係數據庫的內部工作方式與您所描述的非常相似 - 數據庫記錄存儲在有空餘空間的位置,並將索引列中的映射值索引到記錄位置。

+0

我知道B樹和二叉樹之間的區別。 B樹在每個節點中可以有多個值。 – neuromancer 2010-05-08 08:35:10

+0

@Phenom:更重要的區別是B樹節點可以有兩個以上的子節點(通常更多)。 – 2010-05-08 09:07:50

0

B-Tree是一個索引。使用B樹,您可以使用索引找到非常高效的值。索引本身具有節點和葉節點。每個節點具有用於組織樹的內容。節點指針是指向其他節點或葉子。 所以節點有一些值和一些指針。節點指針是偏移索引文件的偏移量。葉子也包含值和指針。區別在於葉中的指針是數據文件的偏移量並指向真正的文件。

所以,當你正在搜索一個值,你正在使用你的索引,以返回給你真實記錄存儲的文件偏移量。例如,你正在尋找ID = 1的記錄,你得到的偏移量10240,那麼你打開數據文件來讀取塊10,如果你有1KB塊。然後從這個偏移量你可以訪問記錄中的所有數據,例如用戶名!

另一種實現方式是使用BTrees,其中葉子不指向其他文件,但他們只是持有第二柱。例如,如果您需要使用ID查找用戶名,您可以有一個B樹,其中葉具有以下結構:第一個值是id,第二個是用戶名,因此您可以從索引獲取用戶名。

您也可以使用B + Tree.B +樹實現爲B樹,但它們將葉子保存在列表中。因此,您可以將索引用於>,<等操作符。