Tải bản đầy đủ (.docx) (39 trang)

CẤU TRÚC CHỈ MỤC FILE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (834.1 KB, 39 trang )

MỤC LỤC
LỜI NÓI ĐẦU.............................................................................................................. 1
1. CÁC LOẠI CHỈ MỤC ĐƯỢC SẮP XẾP ĐƠN MỨC.............................................3
1.1. Chỉ mục sơ cấp...................................................................................................4
1.2. Chỉ mục cụm......................................................................................................7
1.3. Chỉ mục thứ cấp...............................................................................................10
1.4. Tóm tắt............................................................................................................. 13
2. CHỈ MỤC ĐA MỨC..............................................................................................14
3. CÁC CHỈ MỤC ĐA MỨC ĐỘNG SỬ DỤNG B-TREES VÀ B +-TREES............18
3.1. Cây tìm kiếm và B-tree....................................................................................19
3.2. Cây B+-Tree.....................................................................................................24
4. CÁC CHỈ MỤC TRÊN NHIỀU KHĨA.................................................................33
4.1. Chỉ mục có thứ tự trên nhiều thuộc tính...........................................................34
4.2. Phương pháp băm phân hoạch (partitioned hashing).......................................34
4.3. Các file lưới (grid)...........................................................................................35
5. CÁC LOẠI CHỈ MỤC KHÁC................................................................................36
5.1. Sử dụng phương pháp băm và các cấu trúc dữ liệu khác làm chỉ mục.............36
5.2. Chỉ mục logic và chỉ mục vật lý.......................................................................36
5.3. Thảo luận.........................................................................................................36
6. TÓM TẮT............................................................................................................... 37


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

LỜI NĨI ĐẦU
Trong tiểu luận này, chúng tơi sẽ mô tả một số cấu trúc truy xuất bổ sung
được gọi là các chỉ mục (indexes), chúng được sử dụng để tăng tốc độ tìm kiếm
của các bản ghi nhằm đáp ứng cho các điều kiện tìm kiếm nào đó. Các cấu trúc
chỉ mục thường cung cấp các đường dẫn truy xuất thứ cấp (secondary access
paths), đó là những cách khác nhau để truy xuất vào các bản ghi mà khơng ảnh
hưởng đến vị trí vật lý của các bản ghi trên đĩa. Chúng cho phép truy xuất một


cách hiệu quả vào các bản ghi dựa trên các trường chỉ mục (indexing field) được
sử dụng để xây dựng chỉ mục. Về cơ bản, bất kỳ trường nào của file đều có thể
sử dụng để tạo một chỉ mục và nhiều chỉ mục trên các trường khác nhau có thể
được xây dựng trên cùng một file. Có nhiều loại chỉ mục khác nhau, và mỗi loại
sử dụng một cấu trúc dữ liệu (CTDL) cụ thể để tăng tốc độ tìm kiếm. Để tìm ra
một bản ghi hoặc nhiều bản ghi trong file dựa trên một điều kiện chọn lọc nào
đó trên một trường chỉ mục, thì đầu tiên cần phải truy xuất vào chỉ mục, chỉ mục
này sẽ trỏ đến một hoặc nhiều khối trong file mà ở đó có chứa các bản ghi mong
muốn. Loại chỉ mục phổ biến nhất là dựa trên các file đã được sắp xếp (các chỉ
mục đơn mức) và CTDL cây (các chỉ mục đa mức, B +-tree). Các chỉ mục cũng
có thể được xây dựng dựa trên kỹ thuật băm (hashing) hoặc các CTDL tìm kiếm
khác.
Chúng tơi cũng mơ tả các loại chỉ mục sắp xếp đơn mức khác nhau - chỉ
mục sơ cấp (primary index), chỉ mục thứ cấp (secondary index) và chỉ mục phân
cụm (clustering) – trong phần 1. Bằng cách xem một chỉ mục đơn mức như là
một file đã được sắp xếp, có thể phát triển tiếp các chỉ mục bổ sung cho nó, đưa
ra khái niệm về các chỉ mục đa mức. Một kiểu chỉ mục thông dụng gọi là ISAM
(phương pháp truy xuất tuần tự theo chỉ mục - Indexed Sequential Access
Method) được dựa trên ý tưởng này. Chúng ta sẽ thảo luận về các chỉ mục đa
mức trong phần 2. Trong phần 3 chúng tôi sẽ tập trung mô tả B-trees và B +-trees
là các CTDL thường được sử dụng trong các hệ quản trị cơ sở dữ liệu
(HQTCSDL) để thực hiện việc thay đổi các chỉ mục đa mức. B +-trees đã trở
1


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

thành một cấu trúc mặc định được chấp nhận phổ biến cho việc tạo ra các chỉ
mục trong hầu hết các HQTCSDL quan hệ. Phần 4 sẽ tập trung vào một số cách
khác để truy xuất dữ liệu dựa trên sự kết hợp của nhiều khóa. Trong phần 5,

chúng tôi sẽ thảo luận làm cách nào để các CTDL khác, chẳng hạn như cấu trúc
băm, có thể được sử dụng để xây dựng các chỉ mục. Chúng tôi cũng giới thiệu
tóm tắt về khái niệm của các chỉ mục logic, đó là chỉ mục đưa ra một mức bổ
sung gián tiếp từ các chỉ mục vật lý, làm cho chỉ mục vật lý trở nên mềm dẻo và
có khả năng mở rộng trong tổ chức của nó. Phần 6 sẽ là phần tóm tắt tiểu luận.
Chúng tơi xin chân thành cảm ơn TS. Hồng Quang đã tận tình giảng dạy
và chỉ bảo cho chúng tơi nhiều điều bổ ích. Do khả năng có hạn hẳn tiểu luận
khơng tránh khỏi những thiếu sót và hạn chế. Chúng tơi mong tiếp tục nhận
được sự chỉ bảo của Thầy giáo TS. Hoàng Quang để có thể hồn chỉnh hơn nữa
những hiểu biết của mình.

2


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

1. CÁC LOẠI CHỈ MỤC ĐƯỢC SẮP XẾP ĐƠN MỨC
Ý tưởng đằng sau cấu trúc truy xuất chỉ mục được sắp xếp là tương tự với
chỉ mục được sử dụng trong một cuốn sách, trong đó liệt kê ra những mục quan
trọng ở phần cuối của cuốn sách theo thứ tự alphabet cùng với một danh sách
các số trang mà các mục này xuất hiện ở trong sách. Chúng ta có thể tìm kiếm
một chỉ mục để tìm ra một danh sách các địa chỉ - trong trường hợp này là số
trang – và sử dụng những địa chỉ này để định vị một mục trong sách bằng cách
tìm kiếm trong những trang đã xác định. Có thể hình dung nếu khơng có một sự
chỉ dẫn nào khác thì chúng ta sẽ phải duyệt rất chậm từng từ một trong tồn bộ
cuốn sách để tìm ra mục mà chúng ta quan tâm; điều này cũng tương ứng với
việc thực hiện một phép tìm kiếm tuyến tính trên một file. Tất nhiên, hầu hết các
cuốn sách đều có các thơng tin bổ sung, chẳng hạn như tiêu đề của các chương
và phần mục, giúp chúng ta tìm ra một mục mà khơng phải tìm trong tồn bộ
cuốn sách. Tuy nhiên, chỉ mục là sự chỉ định chính xác duy nhất của nơi mà mỗi

mục xuất hiện trong cuốn sách.
Đối với file có cấu trúc bản ghi chứa một số trường (hoặc thuộc tính), một
cấu trúc truy xuất chỉ mục thường được định nghĩa trên một trường đơn lẻ của
một file, được gọi là một trường chỉ mục (hoặc thuộc tính chỉ mục) 1. Chỉ mục
thường lưu trữ mỗi giá trị của trường chỉ mục cùng với một danh sách các con
trỏ trỏ đến tất cả các khối đĩa chứa các bản ghi lưu trữ giá trị của trường đó. Các
giá trị trong chỉ mục được sắp thứ tự, vì vậy chúng ta có thể thực hiện phép tìm
kiếm nhị phân trên chỉ mục. File chỉ mục nhỏ hơn nhiều so với file dữ liệu, vì
vậy quá trình tìm kiếm chỉ mục sử dụng phép tìm kiếm nhị phân là khá hiệu quả.
Đối với chỉ mục đa mức (xem phần 2) thì lại khơng cần thiết phải tìm kiếm nhị
phân bởi vì nó đã tạo ra chỉ mục cho chính các chỉ mục.
Có một số loại chỉ mục được sắp xếp. Một chỉ mục sơ cấp được xác định
trên trường khóa có thứ tự (ordering key field) của một file đã được sắp xếp của
các bản ghi. Chúng ta đã biết một trường khóa có thứ tự được sử dụng để sắp
xếp theo thứ tự vật lý các bản ghi của file trên đĩa, và mỗi bản ghi có một giá trị
duy nhất cho trường đó. Nếu trường có thứ tự khơng phải là trường khóa - nghĩa
là nếu vơ số bản ghi trong file có thể có cùng giá trị đối với trường này - thì một
loại chỉ mục khác, được gọi là chỉ mục cụm có thể được sử dụng. Chú ý rằng
một file chỉ có thể có nhiều nhất một trường sắp xếp theo thứ tự vật lý, do đó nó
cũng chỉ có thể có nhiều nhất một chỉ mục sơ cấp hoặc một chỉ mục cụm, nhưng
không đồng thời là cả hai. Một loại chỉ mục thứ ba, được gọi là chỉ mục thứ cấp,
có thể được xác định trên bất kỳ một trường khơng có thứ tự nào của một file.
Một file có thể có nhiều chỉ mục thứ cấp bổ sung cho phương pháp truy xuất sơ
cấp của nó. Chúng ta sẽ thảo luận những loại chỉ mục đơn mức này trong 3 phần
nhỏ tiếp theo sau đây.

1

Trong tiểu luận này, các thuật ngữ trường và thuộc tính là tương đương nhau


3


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

1.1. Chỉ mục sơ cấp
Một chỉ mục sơ cấp là một file đã được sắp xếp mà các bản ghi của nó có
độ dài cố định gồm hai trường. Trường thứ nhất có cùng kiểu dữ liệu với trường
khóa có thứ tự - được gọi là khóa chính (primary key) - của file dữ liệu, và
trường thứ hai là một con trỏ trỏ đến một khối đĩa (một địa chỉ của khối). Có
một đầu vào chỉ mục – index entry (hoặc bản ghi chỉ mục – index record) trong
file chỉ mục đối với mỗi khối trong file dữ liệu. Mỗi đầu vào chỉ mục có giá trị
của trường khóa chính (primary key field) cho bản ghi đầu tiên trong một khối
và một con trỏ trỏ đến khối đó như giá trị hai trường của nó. Chúng ta sẽ gọi hai
giá trị trường của đầu vào chỉ mục i là <K(i), P(i)>.
Để tạo ra một chỉ mục sơ cấp trên file đã sắp xếp, chúng ta sử dụng
trường Name làm khóa chính, bởi vì đó là trường khóa có thứ tự của file (giả sử
rằng mỗi giá trị của Name là duy nhất). Mỗi đầu vào trong chỉ mục có một giá
trị Name và một con trỏ. Ba đầu vào chỉ mục đầu tiên là như sau:
<K(1) = (Aaron, ED), P(1) = địa chỉ của khối 1>
<K(2) = (Adams, John), P(2) = địa chỉ của khối 2>
<K(3) = (Alexander, Ed), P(3) = địa chỉ của khối 3>
Hình 1 sẽ minh họa cho chỉ mục sơ cấp này. Tổng số các đầu vào trong
chỉ mục là giống với số các khối đĩa trong file dữ liệu được sắp xếp. Bản ghi đầu
tiên trong mỗi khối của file dữ liệu được gọi là bản ghi gốc (anchor record) của
khối, hay đơn giản gọi là block anchor2.

2

Chúng ta cũng có thể sử dụng một kịch bản tương tự như thế này, nhưng trong đó bản ghi cuối cùng của mỗi

khối (thay vì bản ghi đầu tiên) là block anchor. Điều này sẽ cải thiện khơng đáng kể hiệu quả của thuật tốn tìm
kiếm.

4


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Hình 1. Chỉ mục sơ cấp trên trường khóa có thứ tự của file của các bản ghi
EMPLOYEE với Name là một trường khóa có thứ tự.
Các chỉ mục cũng có thể được mơ tả là trù mật hoặc thưa thớt. Một chỉ
mục trù mật có một đầu vào chỉ mục cho mỗi giá trị khóa tìm kiếm (và do đó là
cho mọi bản ghi) trong file dữ liệu. Trong khi đó, một chỉ mục thưa (hoặc khơng
trù mật), chỉ có các đầu vào chỉ mục cho một số các giá trị tìm kiếm. Vì vậy,
một chỉ mục sơ cấp là chỉ mục khơng trù mật (thưa), bởi vì nó bao gồm một đầu
vào cho mỗi khối đĩa của file dữ liệu và các khóa của bản ghi gốc, thay vì là một
đầu vào cho mỗi giá trị tìm kiếm (hoặc mỗi bản ghi).
5


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Về thực chất, file chỉ mục cho một chỉ mục sơ cấp cần ít khối hơn so với
file dữ liệu bởi 2 lý do sau. Thứ nhất, số đầu vào chỉ mục ít hơn so với số bản
ghi trong file dữ liệu. Thứ hai, mỗi đầu vào chỉ mục thường có kích thước nhỏ
hơn so với một bản ghi dữ liệu bởi vì nó chỉ có 2 trường; do đó, trong một khối
sẽ có thể đặt số đầu vào chỉ mục nhiều hơn so với số bản ghi dữ liệu. Vì vậy,
một phép tìm kiếm nhị phân trên file chỉ mục địi hỏi ít truy xuất khối hơn so với
một phép tìm kiếm nhị phân trên file dữ liệu. Chú ý rằng phép tìm kiếm nhị
phân cho một file dữ liệu đã sắp xếp yêu cầu log2b lần truy xuất khối. Nhưng

nếu file chỉ mục sơ cấp chứa bi khối, thì để định vị một bản ghi với một giá trị
tìm kiếm phải yêu cầu một phép tìm kiếm nhị phân của chỉ mục đó và truy xuất
đến khối có chứa bản ghi đó: tổng cộng có log2bi + 1 lần truy xuất.
Một bản ghi mà giá trị khóa chính là K nằm trong khối có địa chỉ là P(i),
trong đó K(i) ≤ K < K(i+1). Khối thứ i trong file dữ liệu sẽ chứa tất cả các bản
ghi như thế bởi vì do thứ tự vật lý của các bản ghi file trên trường khóa chính.
Để thu được một bản ghi, với giá trị K của trường khóa chính đã biết, thì chúng
ta sẽ thực hiện một phép tìm kiếm nhị phân trên file chỉ mục để tìm ra đầu vào
chỉ mục thích hợp i, và sau đó thu được khối file dữ liệu mà có địa chỉ là P(i)3.
Ví dụ 1 sẽ minh họa việc tiết kiệm số lần truy xuất khối có thể thu được khi sử
dụng một chỉ mục sơ cấp để tìm kiếm một bản ghi.
Ví dụ 1. Giả sử rằng chúng ta có một file đã sắp xếp với r = 30,000 bản
ghi được lưu trữ trên đĩa với kích thước khối là B = 1024 bytes. Các bản ghi của
file có kích thước cố định và không được thay đổi, với độ dài của bản ghi là R =
100 bytes. Hệ số tạo khối (blocking factor) cho file sẽ là bfr = (B/R) =
(1024/100) = 10 bản ghi cho mỗi khối. Số lượng các khối cần cho file là b =
(r/bfr) = (30,000/10) = 3000 khối. Một phép tìm kiếm nhị phân trên file dữ
liệu sẽ cần khoảng log2b = log23000 = 12 lần truy xuất khối.
Bây giờ giả sử rằng trường khóa có thứ tự của một file là V có chiều dài là
9 bytes, một con trỏ khối P có chiều dài là 6 bytes, và chúng ta đã xây dựng một
chỉ mục sơ cấp cho file. Kích thước của mỗi đầu vào chỉ mục là Ri = (9 + 6) = 15
bytes, vì vậy hệ số tạo khối cho chỉ mục là bfri = (B/Ri) = (1024/15) = 68
đầu vào cho mỗi khối. Tổng số các đầu vào chỉ mục ri bằng số các khối trong
file dữ liệu, tức là 3000 khối. Vì vậy, số lượng các khối chỉ mục là bi = (ri/bfri)
= (3000/68) = 45 khối. Để thực hiện một phép tìm kiếm nhị phân trên file chỉ
mục, thì sẽ cần (log2bi) = log245 = 6 lần truy xuất khối. Để tìm kiếm một
bản ghi bằng cách sử dụng chỉ mục, chúng ta cần thêm một lần truy xuất khối
đến file dữ liệu, như vậy tổng số là 6 +1 = 7 lần truy xuất khối – đây là một cải
tiến so với phép tìm kiếm nhị phân trên file dữ liệu (yêu cầu 12 lần truy xuất
khối).

3

Lưu ý rằng các cơng thức trên có thể sẽ không đúng nếu file dữ liệu được sắp xếp theo một trường khơng phải
khóa; trong trường hợp này, cùng một giá trị chỉ mục trong block anchor có thể sẽ bị lặp lại trong các bản ghi
cuối cùng của block kề trước.

6


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Một vấn đề chính với một chỉ mục sơ cấp - chẳng hạn như với bất kỳ file
đã được sắp xếp nào – là thao tác chèn và xóa các bản ghi. Với một chỉ mục sơ
cấp, vấn đề này càng phức tạp bởi vì nếu chúng ta thực hiện việc chèn một bản
ghi vào đúng vị trí của nó trong file dữ liệu, thì chúng ta khơng những phải di
chuyển các bản ghi đi nơi khác để dành khơng gian trống cho bản ghi mới mà
cịn phải thay đổi một số đầu vào chỉ mục, bởi vì việc di chuyển các bản ghi này
sẽ làm thay đổi các bản ghi gốc của một số khối. Việc sử dụng file overflow
chưa sắp xếp có thể làm giảm bớt vấn đề này. Một cách khác nữa là sử dụng một
danh sách liên kết của các bản ghi overflow cho mỗi khối trong file dữ liệu.
Điều này tương tự như phương pháp giải quyết các bản ghi overflow được mô tả
với kỹ thuật băm. Các bản ghi bên trong mỗi khối và danh sách liên kết
overflow của nó có thể được sắp xếp để cải thiện thời gian truy xuất. Việc xóa
bản ghi được xử lý bằng cách sử dụng các dấu hiệu xóa (marker).
1.2. Chỉ mục cụm
Nếu các bản ghi file đã được sắp xếp theo thứ tự vật lý trên một trường
khơng khóa – chúng khơng có một giá trị phân biệt cho mỗi bản ghi – thì trường
đó được gọi là trường phân cụm (clustering field). Chúng ta có thể tạo ra một
loại chỉ mục khác, được gọi là chỉ mục cụm, để tăng tốc độ truy xuất của các
bản ghi có cùng giá trị của trường phân cụm. Loại chỉ mục này khác với chỉ mục

sơ cấp (chỉ mục sơ cấp yêu cầu trường có thứ tự của file dữ liệu phải có một giá
trị phân biệt cho mỗi bản ghi).
Một chỉ mục cụm cũng là một file được sắp xếp thứ tự, gồm có hai
trường. Trường thứ nhất có cùng kiểu với trường phân cụm của file dữ liệu, và
trường thứ hai là một con trỏ khối. Có một đầu vào trong chỉ mục cụm đối với
mỗi giá trị phân biệt của trường phân cụm, chứa giá trị và một con trỏ trỏ đến
khối đầu tiên trong file dữ liệu mà có chứa bản ghi với giá trị bằng giá trị trong
trường phân cụm đó. Hình 2 sẽ minh họa một ví dụ. Chú ý rằng việc chèn và
xóa bản ghi vẫn sẽ làm nảy sinh các vấn đề bởi vì các bản ghi dữ liệu đã được
sắp xếp theo thứ tự vật lý. Để làm giảm bớt vấn đề trong việc chèn bản ghi,
thông thường là dự trữ trước một khối (hoặc một nhóm các khối liền nhau) cho
mỗi giá trị của trường phân cụm; tất cả các bản ghi với giá trị đó sẽ được đặt vào
trong khối (hoặc nhóm khối). Điều này làm cho việc chèn và xóa các bản ghi có
thể dễ dàng thực hiện hơn. Hình 3 sẽ chỉ ra điều này.

7


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Hình 2. Một chỉ mục cụm trên trường khơng khóa có thứ tự Dept_number của
file EMPLOYEE

8


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Hình 3. Chỉ mục cụm với một cụm các khối riêng biệt cho mỗi nhóm của các
bản ghi chia sẻ cùng một giá trị cho trường phân cụm

Một chỉ mục cụm là một ví dụ khác của chỉ mục khơng trù mật bởi vì nó
có một đầu vào cho mỗi giá trị riêng biệt của trường chỉ mục, mà theo định
nghĩa thì nó là một trường khơng khóa, và do đó nó có các giá trị trùng nhau
thay vì các giá trị phân biệt cho mỗi bản ghi trong file. Ta thấy có một số điểm
tương đồng giữa Hình 1 và Hình 3. Một chỉ mục là một cái gì đó tương tự như
cấu trúc thư mục được sử dụng cho kỹ thuật băm có thể mở rộng. Cả hai đều
thực hiện tìm kiếm để tìm ra một con trỏ trỏ đến khối dữ liệu chứa bản ghi mong
9


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

muốn. Một điểm khác biệt chính đó là một việc tìm kiếm chỉ mục sử dụng các
giá trị của chính trường tìm kiếm, trong khi một phép tìm kiếm thư mục băm sử
dụng giá trị băm được tính tốn bằng cách áp dụng hàm băm cho trường tìm
kiếm.
1.3. Chỉ mục thứ cấp
Một chỉ mục thứ cấp cung cấp một phương thức thứ cấp để truy xuất một
file mà đã có một số truy xuất sơ cấp. Chỉ mục thứ cấp có thể thực hiện trên một
trường khóa ứng viên (có một giá trị duy nhất cho mỗi bản ghi), hoặc trên một
trường khơng khóa (có thể có các giá trị trùng nhau). Chỉ mục là một file đã
được sắp xếp gồm 2 trường. Trường đầu tiên có cùng kiểu dữ liệu với một số
trường không sắp thứ tự của file dữ liệu, đó là một trường chỉ mục. Trường thứ
hai thì có thể là một con trỏ khối hoặc là một con trỏ bản ghi. Có thể có nhiều
chỉ mục thứ cấp (và do đó, có nhiều trường chỉ mục) cho cùng một file.
Đầu tiên, chúng ta xét một cấu trúc truy xuất chỉ mục thứ cấp trên một
trường khóa có giá trị phân biệt với mỗi bản ghi. Một trường như vậy đơi khi
được gọi là một khóa phụ. Trong trường hợp này có một đầu vào chỉ mục cho
mỗi bản ghi trong file dữ liệu, chứa giá trị của khóa phụ cho bản ghi, và một con
trỏ trỏ đến khối trong đó bản ghi được lưu trữ hoặc trỏ đến chính bản ghi đó. Do

đó, chỉ mục như vậy là trù mật.
Một lần nữa, chúng ta lại đề cập đến hai giá trị trường của đầu vào chỉ
mục i là <K(i), P(i)>. Các đầu vào được sắp xếp theo giá trị của K(i), vì vậy,
chúng ta có thể thực hiện một phép tìm kiếm nhị phân. Bởi vì những bản ghi của
file dữ liệu khơng được sắp xếp theo thứ tự vật lý theo giá trị của trường khóa
phụ, nên chúng ta khơng thể sử dụng block anchors. Đó là lý do tại sao mà một
đầu vào chỉ mục được tạo ra cho mỗi bản ghi trong file dữ liệu, chứ không phải
là cho mỗi khối, như trong trường hợp của chỉ mục sơ cấp. Hình 4 minh họa một
chỉ mục thứ cấp trong đó các con trỏ P(i) trong các đầu vào chỉ mục là các con
trỏ khối, không phải các con trỏ bản ghi. Mỗi khi khối thích hợp được chuyển
đến bộ nhớ chính, thì việc tìm kiếm bản ghi mong muốn bên trong khối có thể
được tiến hành.
Một chỉ mục thứ cấp thường cần đến nhiều khơng gian lưu trữ và nhiều
thời gian tìm kiếm hơn so với một chỉ mục sơ cấp, do số lượng các đầu vào
nhiều hơn. Tuy nhiên, việc cải tiến thời gian tìm kiếm cho một bản ghi bất kỳ
đối với chỉ mục thứ cấp là tốt hơn nhiều so với chỉ mục sơ cấp, bởi vì chúng ta
sẽ phải thực hiện một phép tìm kiếm tuyến tính trên file dữ liệu nếu chỉ mục thứ
cấp không tồn tại. Đối với một chỉ mục sơ cấp, chúng ta vẫn có thể sử dụng một
phép tìm kiếm nhị phân trên file chính, ngay cả khi chỉ mục khơng tồn tại. Ví dụ
2 sau đây sẽ minh họa việc cải tiến số lượng các khối được truy xuất.

10


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Hình 4. Chỉ mục thứ cấp trù mật (với các con trỏ khối) trên một trường khóa
khơng có thứ tự của một file
Ví dụ 2. Xét file ở ví dụ 1 với r = 30,000 các bản ghi có độ dài cố định với
kích cỡ là R = 100 bytes được lưu trữ trên một đĩa với kích thước khối là B =

1024 bytes. File có b = 3000 khối, như đã tính trong ví dụ 1. Để thực hiện một
phép tìm kiếm tuyến tính trên file, chúng ta cần trung bình là b/2 = 3000/2 =
1500 lần truy xuất khối. Giả sử rằng chúng ta xây dựng một chỉ mục thứ cấp
trên một trường khóa khơng có thứ tự của file, có độ dài là V = 9 bytes. Như
trong ví dụ 1, một con trỏ khối có độ dài là P = 6 bytes, vì vậy mỗi đầu vào chỉ
mục là Ri = (9 + 6) = 15 bytes, và hệ số tạo khối cho chỉ mục là bfri = (B/Ri) =
(1024/15) = 68 đầu vào cho mỗi khối. Trong một chỉ mục thứ cấp trù mật như
vậy, tổng số các đầu vào chỉ mục ri là bằng với số các bản ghi trong file dữ liệu,
11


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

tức là 30,000. Vì vậy, số các khối cần cho chỉ mục là b i =

(ri/bfri) =

(30000/68) = 442 khối.
Một phép tìm kiếm nhị phân trên chỉ mục thứ cấp này cần có (log2bi) =
(log2442) = 9 lần truy xuất khối. Để tìm ra một bản ghi sử dụng chỉ mục,
chúng ta cần thêm một lần truy xuất khối vào file dữ liệu, như vậy tổng cộng là
9 + 1 = 10 lần truy xuất khối – một cải tiến đáng kể so với 1500 lần truy xuất
khối cần thiết trung bình cho phép tìm kiếm tuyến tính, nhưng vẫn tệ hơn một
chút so với 7 lần truy xuất khối cần thiết đối với chỉ mục sơ cấp.
Chúng ta cũng có thể tạo ra một chỉ mục thứ cấp trên một trường khơng
khóa của một file. Trong trường hợp này, sẽ có nhiều bản ghi trong file dữ liệu
có thể có cùng giá trị cho trường chỉ mục. Có một số tùy chọn cho việc cài đặt
một chỉ mục như vậy:



Tùy chọn 1 là gộp một số đầu vào chỉ mục với cùng giá trị K(i) –
một đầu vào chỉ mục cho mỗi bản ghi. Đây sẽ là một chỉ mục trù mật.



Tùy chọn 2 là sử dụng các bản ghi có độ dài khơng cố định cho các
đầu vào chỉ mục, cùng với một trường lặp cho con trỏ. Chúng ta giữ một
danh sách các con trỏ <P(i, 1), …, P(i, k)> trong đầu vào chỉ mục cho
K(i) – một con trỏ trỏ đến mỗi khối chứa một bản ghi có giá trị trường chỉ
mục bằng K(i). Trong tùy chọn 1 hoặc tùy chọn 2, giải thuật tìm kiếm nhị
phân trên chỉ mục phải được hiệu chỉnh một cách thích hợp.



Tùy chọn 3 được sử dụng phổ biến hơn, là giữ cho các đầu vào chỉ
mục ở một độ dài cố định và có một đầu vào đơn cho mỗi giá trị trường
chỉ mục, nhưng tạo ra một mức bổ sung gián tiếp để xử lý nhiều con trỏ.
Trong kịch bản không trù mật này, con trỏ P(i) trong đầu vào chỉ mục
<K(i), P(i)> trỏ đến một khối các con trỏ bản ghi; mỗi con trỏ bản ghi
trong khối đó trỏ đến một trong các bản ghi của file dữ liệu với giá trị K(i)
cho trường chỉ mục. Nếu một vài giá trị K(i) nào đó xuất hiện trong quá
nhiều bản ghi, thì các con trỏ bản ghi của chúng không thể trỏ vào một
khối đĩa đơn lẻ, do đó một cụm hoặc một danh sách liên kết của các khối
được sử dụng. Kỹ thuật này được minh họa trong Hình 5. Việc truy xuất
thơng qua chỉ mục yêu cầu thêm một hoặc nhiều lần truy xuất khối,
nguyên nhân là do mức bổ sung, nhưng các giải thuật tìm kiếm chỉ mục
và (quan trọng hơn) cho việc chèn các bản ghi mới trong file dữ liệu lại dễ
dàng. Ngồi ra, những phép tìm kiếm trên các điều kiện chọn lọc phức tạp
sẽ được xử lý bằng cách tham chiếu đến các con trỏ bản ghi, mà không
cần phải truy xuất quá nhiều bản ghi không cần thiết.


Chú ý rằng một chỉ mục thứ cấp cung cấp một sự sắp xếp logic trên các
bản ghi bằng trường chỉ mục. Nếu chúng ta truy xuất các bản ghi theo thứ tự của
những đầu vào trong chỉ mục thứ cấp, chúng ta sẽ lấy chúng theo thứ tự của
trường chỉ mục.
12


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Hình 5. Một chỉ mục thứ cấp (với các con trỏ bản ghi) trên một trường khơng
khóa được cài đặt bằng cách sử dụng một mức gián tiếp (level of indirection) để
cho các đầu vào chỉ mục có độ dài cố định và có các giá trị trường duy nhất.
1.4. Tóm tắt
Để kết luận cho phần này, chúng ta tóm tắt các thảo luận về các loại chỉ
mục nói trên trong 2 bảng. Bảng 1 chỉ ra các đặc điểm của trường chỉ mục của
mỗi loại chỉ mục đơn mức mà ta đã thảo luận – bao gồm chỉ mục sơ cấp, chỉ
mục cụm và chỉ mục thứ cấp. Bảng 2 tóm tắt các thuộc tính của mỗi loại chỉ
mục bằng cách so sánh số lượng các đầu vào chỉ mục và xác định chỉ mục nào là
trù mật và chỉ mục nào sử dụng các block anchors của file dữ liệu.

13


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Bảng 1. Các loại chỉ mục dựa trên các thuộc tính của trường chỉ mục
Trường chỉ mục
được sử dụng cho
việc sắp xếp file


Trường chỉ mục không
được sử dụng cho việc
sắp xếp file

Trường chỉ mục là khóa

Chỉ mục sơ cấp

Chỉ mục thứ cấp (khóa)

Trường chỉ mục khơng là
khóa

Chỉ mục cụm

Chỉ mục thứ cấp (khơng
khóa)

Bảng 2. Thuộc tính của các loại chỉ mục
Loại chỉ
mục

Số đầu vào chỉ mục (mức 1)

Trù mật /
Không trù
mật

Sử dụng Block

Anchor trên
file dữ liệu

Sơ cấp

Số các khối trong file dữ liệu

Khơng trù
mật



Cụm

Số các giá trị trường chỉ mục
phân biệt

Khơng trù
mật

Có/khơnga

Thứ cấp
(khóa)

Số các bản ghi trong file dữ
liệu

Trù mật


Không

Trù mật
hoặc không
trù mật

Không

Thứ cấp
Số các bản ghib hoặc số các
(khơng khóa) giá trị trường chỉ mục phân
biệtc
a

Có nếu mỗi giá trị phân biệt của trường sắp thứ tự bắt đầu một khối mới;
không nếu ngược lại.
b

Cho tùy chọn 1.

c

Cho tùy chọn 2 và 3.

2. CHỈ MỤC ĐA MỨC
Các loại chỉ mục đã mô tả ở trên đề cập đến một file chỉ mục đã được sắp
xếp. Một phép tìm kiếm nhị phân được áp dụng cho chỉ mục để định vị các con
trỏ trỏ đến một khối đĩa hoặc đến một bản ghi (hoặc các bản ghi) trên file có một
giá trị trường chỉ mục cụ thể. Một phép tìm kiếm nhị phân yêu cầu số lần truy
xuất khối xấp xỉ là (log2bi) cho một chỉ mục với bi khối bởi vì mỗi bước của giải

thuật này sẽ làm giảm kích thước phần của file chỉ mục mà chúng ta cần tiếp tục
tìm kiếm theo một hệ số của 2. Đó là nguyên nhân tại sao mà chúng ta sử dụng
hàm log cơ số 2. Ý tưởng của một chỉ mục đa mức là làm giảm phần của chỉ
mục mà chúng ta tiếp tục tìm kiếm với hệ số bfri (hệ số tạo khối cho chỉ mục),
14


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

mà nó lớn hơn 2. Vì vậy, khơng gian tìm kiếm sẽ giảm đi nhanh hơn nhiều. Giá
trị bfri được gọi là hệ số phân đầu ra (fan-out) của chỉ mục đa mức, và chúng ta
sẽ ký hiệu nó là fo. Việc tìm kiếm một chỉ mục đa mức yêu cầu số lượng lần truy
xuất khối xấp xỉ là (logfobi), đây là một giá trị nhỏ hơn so với phép tìm kiếm nhị
phân nếu fan-out lớn hơn 2.
Một chỉ mục đa mức xem file chỉ mục, mà từ nay chúng ta sẽ gọi là mức 1
(hoặc mức cơ sở) của một chỉ mục đa mức, như là một file được sắp xếp với một
giá trị phân biệt cho mỗi K(i). Vì vậy, chúng ta có thể tạo ra một chỉ mục sơ cấp
cho mức 1; chỉ mục đối với mức 1 này được gọi là mức 2 của chỉ mục đa mức.
Bởi vì mức 2 là một chỉ mục sơ cấp, nên chúng ta có thể sử dụng các block
anchors để cho mức 2 này có một đầu vào cho mỗi khối của mức 1. Hệ số tạo
khối bfri cho mức 2 – và cho tất cả các mức tiếp theo – là giống với hệ số tạo
khối của chỉ mục mức 1 bởi vì tất cả các đầu vào chỉ mục đều có kích thước
giống nhau (bao gồm 1 giá trị trường và 1 địa chỉ khối). Nếu mức 1 có r1 đầu
vào, và hệ số tạo khối – cũng chính là fan-out – cho chỉ mục là bfri = fo, thì mức
1 cần (r1/fo) khối, đó chính là số lượng các đầu vào mà r2 cần ở mức 2 của chỉ
mục.
Chúng ta có thể lặp lại tiến trình này cho mức 2. Mức 3, là một chỉ mục
sơ cấp cho mức 2, có một đầu vào cho mỗi khối ở mức 2, do đó số lượng các
đầu vào ở mức 3 là r3 = (r2/fo) . Chú ý rằng chúng ta chỉ cần đến mức 2 nếu
việc lưu trữ trên đĩa của mức 1 cần nhiều hơn một khối, và tương tự như vậy,

chúng ta cũng chỉ cần đến mức 3 khi mức 2 cần nhiều hơn một khối. Chúng ta
có thể lặp lại tiến trình này cho đến khi tất cả các đầu vào của một mức chỉ mục
t nào đó nằm trọn trong một khối đơn lẻ. Khối này ở mức thứ t được gọi là mức
chỉ mục cao nhất4. Mỗi mức sẽ làm giảm số lượng các đầu vào ở mức trước đó
theo một hệ số của fo, vì vậy chúng ta có thể sử dụng cơng thức 1 ≤ (r1/((fo)t)) để
tính tốn t. Từ đó, một chỉ mục đa mức với r1 đầu vào mức 1 sẽ có xấp xỉ t mức,
với t = (logfo(r1)) .
Kịch bản đa mức được miêu tả ở đây có thể được sử dụng trên bất kỳ loại
chỉ mục nào, cho dù nó là chỉ mục sơ cấp, chỉ mục cụm hoặc chỉ mục thứ cấp –
miễn là chỉ mục mức 1 có các giá trị phân biệt K(i) và các đầu vào có độ dài cố
định. Hình 6 sẽ cho thấy một chỉ mục đa mức. Ví dụ 3 sẽ minh họa sự cải thiện
số lần truy xuất khối khi một chỉ mục đa mức được sử dụng để tìm kiếm một
bản ghi.
Ví dụ 3. Giả sử rằng chỉ mục thứ cấp trù mật ở Ví dụ 2 được chuyển đổi
thành một chỉ mục đa mức. Chúng ta tính tốn hệ số tạo khối chỉ mục bfri = 68
đầu vào chỉ mục cho mỗi khối, và nó cũng là fan-out fo cho chỉ mục đa mức; số
các khối ở mức 1 là b1 = 442 khối. Số các khối ở mức 2 sẽ là b2 = (b1/fo) =
(442/68) =7 khối, và số các khối ở mức 3 sẽ là b3 = (b2/fo) = (7/68) =1 khối.
4

Việc đánh số các mức chỉ mục được sử dụng ở đây là ngược lại so với cách mà các chỉ mục thường được định
nghĩa đối với các cấu trúc dữ liệu cây. Trong các cấu trúc dữ liệu cây, t là mức 0, t-1 là mức 1, v.v.

15


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

Vì vậy, mức 3 là mức cao nhất của chỉ mục, và t = 3. Để truy xuất một bản ghi
bằng cách tìm kiếm trên chỉ mục đa mức, chúng ta phải truy xuất một khối ở

mỗi mức cộng với một khối từ file dữ liệu, vì vậy chúng ta phải cần t + 1 = 3 + 1
= 4 lần truy xuất khối. Trong khi ở ví dụ 2 ta phải cần đến 10 lần truy xuất khối
khi sử dụng một chỉ mục đơn mức và phép tìm kiếm nhị phân.

Hình 6. Một chỉ mục sơ cấp 2 mức tương tự như tổ chức file kiểu ISAM
(Phương pháp truy xuất tuần tự theo chỉ mục)
Chú ý rằng chúng ta cũng có thể có một chỉ mục sơ cấp đa mức, và nó sẽ
khơng trù mật. Khi đó chúng ta phải truy xuất khối dữ liệu từ file trước khi
chúng ta có thể xác định bản ghi đang được tìm kiếm có chứa trong file hay
khơng. Với một chỉ mục trù mật, điều này có thể được xác định bằng cách truy
xuất mức chỉ mục đầu tiên (mà không phải truy xuất đến khối dữ liệu), bởi vì đã
có một đầu vào chỉ mục cho mỗi bản ghi trong file.
Một mơ hình tổ chức file thơng dụng được sử dụng trong việc xử lý dữ
liệu kinh doanh là một file được sắp thứ tự với một chỉ mục sơ cấp đa mức trên
trường khóa có thứ tự của nó. Một mơ hình tổ chức như vậy được gọi là một file
tuần tự có chỉ mục và trước đây được sử dụng trong rất nhiều hệ thống máy
16


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

IBM. Việc chèn một bản ghi được xử lý bởi một số dạng file overflow nào đó
mà nó được hợp nhất một cách định kỳ với file dữ liệu. Chỉ mục được tái tạo
trong suốt quá trình tổ chức lại file. Mơ hình tổ chức ISAM của IBM kết hợp với
một chỉ mục 2 mức có liên quan mật thiết với tổ chức của ổ đĩa. Mức đầu tiên là
một chỉ số trụ (cylinder index), có giá trị khóa của một bản ghi anchor cho mỗi
cylinder của một gói đĩa và một con trỏ trỏ đến chỉ số rãnh (track index) của
cylinder đó. Chỉ số rãnh nhận giá trị khóa của một bản ghi anchor cho mỗi track
trong cylinder và một con trỏ trỏ đến track. Sau đó track này có thể được tìm
kiếm một cách tuần tự để tìm ra bản ghi hoặc khối mong muốn.

Thuật tốn 1 sẽ mơ tả vắn tắt về thủ tục tìm kiếm một bản ghi trong một
file dữ liệu sử dụng một chỉ mục sơ cấp đa mức không trù mật với t mức. Chúng
ta chỉ ra đầu vào i ở mức j của chỉ mục là <Kj(i), Pj(i)>, và chúng ta tìm kiếm
một bản ghi mà giá trị khóa chính của nó là K. Chúng ta giả sử rằng các bản ghi
overflow đều bị loại bỏ. Nếu bản ghi đó nằm ở trong file thì phải có một đầu vào
nào đó ở mức 1 với K1(i) ≤ K < K1(i+1) và bản ghi sẽ ở trong khối của file dữ
liệu có địa chỉ là P1(i).
Thuật tốn 1. Tìm kiếm một chỉ mục sơ cấp đa mức không trù mật với t mức.
p ← địa chỉ của khối chỉ mục ở mức cao nhất;
for j ← t step -1 to 1 do
begin
Đọc khối chỉ mục (ở mức chỉ mục thứ j) có địa chỉ là p;
Tìm đầu vào i trong khối p sao cho Kj(i) ≤ K < Kj(i + 1) (nếu Kj(i) là đầu vào cuối
cùng trong khối, thì chỉ cần thỏa mãn Kj(i) ≤ K là đủ);
p ← Pj(i) (* nhặt ra con trỏ thích hợp ở mức chỉ mục thứ j *);
end;
Đọc khối file dữ liệu có địa chỉ p;
Tìm trong khối p bản ghi với khóa = K;

Như chúng ta đã thấy, một chỉ mục đa mức sẽ làm giảm số lần truy xuất
khối khi tìm kiếm một bản ghi, đưa ra giá trị trường chỉ mục của nó. Chúng ta
cũng sẽ phải đối mặt với các vấn đề khi giải quyết việc chèn và xóa chỉ mục, bởi
vì tất cả các mức chỉ mục đều là các file được sắp theo thứ tự vật lý. Để giữ lại
những lợi ích của chỉ mục đa mức trong khi giảm thiểu các vấn đề về chèn và
xóa chỉ mục, các nhà thiết kế đã đưa ra một loại chỉ mục đa mức được gọi là chỉ
mục đa mức động (dynamic multilevel index). Loại chỉ mục này sẽ để dành một
khơng gian nào đó trong mỗi khối cho việc chèn vào các đầu vào mới. Việc này
thường được thực hiện bằng cách sử dụng các cấu trúc dữ liệu được gọi là Btrees và B+-trees mà chúng ta sẽ mô tả trong phần tiếp theo.

17



Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

3. CÁC CHỈ MỤC ĐA MỨC ĐỘNG SỬ DỤNG B-TREES VÀ B +TREES
B-trees và B+- trees là những trường hợp đặc biệt của CTDL cây nổi
tiếng. Ở đây chúng tôi sẽ mô tả vắn tắt thuật ngữ được sử dụng trong việc thảo
luận các CTDL cây. Một cây (tree) được hình thành từ các nút (node). Mỗi nút
trong cây, ngoại trừ một nút đặc biệt gọi là nút gốc (root), tất cả các nút cịn lại
đều có một nút cha (parent) và có 0 hoặc nhiều nút con (child). Nút gốc khơng
có nút cha. Một nút khơng có bất kỳ nút con nào thì được gọi là nút lá (leaf);
một nút khơng phải là nút lá thì được gọi là nút nội (internal). Mức của một nút
luôn luôn lớn hơn một mức so với nút cha của nó, và mức của nút gốc luôn luôn
bằng 05. Cây con (subtree) của một nút chứa nút đó và tất cả những nút con cháu
(descendant) của nó – các nút con của nó, rồi các nút con của các nút con, v.v.
Một định nghĩa đệ quy chính xác cho một cây con là nó chứa một nút n và các
cây con của tất cả các nút con của n. Hình 7 dưới đây sẽ minh họa một CTDL
cây. Trong hình này, nút gốc là nút A, và các nút con của nó là B, C và D.
Những nút E, J, C, G, H và K là các nút lá.

Hình 7. Một CTDL cây biểu diễn một cây không cân bằng
Chúng ta thường biểu diễn một cây với nút gốc ở trên cùng, như trong
Hình 7. Một cách để cài đặt cây là ứng với mỗi nút con của một nút sẽ có một
con trỏ. Trong một số trường hợp, một con trỏ cha cũng được lưu trữ trong mỗi
nút. Ngoài các con trỏ, một nút thường chứa một số loại thông tin lưu trữ. Khi
một chỉ mục đa mức được cài đặt dưới dạng một cấu trúc cây thì thơng tin này
sẽ bao gồm các giá trị của trường chỉ mục của file được sử dụng để định hướng
việc tìm kiếm một bản ghi cụ thể.
Trong phần 3.1, chúng tôi sẽ giới thiệu về cây tìm kiếm và sau đó thảo
luận về B-tree, là các cây có thể được sử dụng như là các chỉ mục đa mức động

5

Định nghĩa về mức của một nút trong cây, mà chúng ta sẽ sử dụng trong suốt phần 14.3 này, là khác so với định
nghĩa về các chỉ mục đa mức trong phần 14.2

18


Tiểu luận môn CSDL nâng cao: “Cấu trúc chỉ mục cho file”

để định hướng cho việc tìm kiếm các bản ghi trong một file dữ liệu. Các nút trên
B-tree được lấp đầy từ 50 đến 100%, và các con trỏ trỏ đến các khối dữ liệu
được lưu trữ trong cả các nút nội và các nút lá của cấu trúc B-tree. Trong phần
3.2, chúng ta sẽ thảo luận về B +-trees, một biến thể của B-trees trong đó các con
trỏ trỏ đến các khối dữ liệu của một file chỉ được lưu trữ trong các nút lá, và có
thể tạo ra các chỉ mục có khả năng cao nhưng có mức thấp hơn.
3.1. Cây tìm kiếm và B-tree
Một cây tìm kiếm là một loại cây đặc biệt được sử dụng để định hướng
việc tìm kiếm một bản ghi, cho ra giá trị của một trong các trường của bản ghi.
Các chỉ mục đa mức đã được trình bày trong phần 2 có thể được xem như là một
biến thể của cây tìm kiếm; mỗi nút trong chỉ mục đa mức có thể có fo con trỏ và
fo giá trị khóa, trong đó fo là hệ số đầu ra chỉ mục. Các giá trị trường chỉ mục
trong mỗi nút sẽ định hướng chúng ta đến nút tiếp theo, cho tới khi tìm được
khối file dữ liệu chứa các bản ghi mong muốn. Bằng cách duyệt theo một con
trỏ, chúng ta giới hạn việc tìm kiếm của mình tại mỗi mức thành một cây con
của cây tìm kiếm và bỏ qua tất cả các nút khơng nằm trong cây con đó.
Cây tìm kiếm
Một cây tìm kiếm là hơi khác so với một chỉ mục đa mức. Một cây tìm
kiếm bậc p là một cây mà mỗi nút chứa tối đa p-1 giá trị tìm kiếm và p con trỏ
theo thứ tự <P1, K1, P2, K2, …, Pq-1, Kq-1, Pq>, trong đó q ≤ p; mỗi Pi là một con

trỏ trỏ đến một nút con (hoặc là một con trỏ NULL); và mỗi Ki là giá trị tìm
kiếm từ một số tập các giá trị được sắp thứ tự. Tất cả các giá trị tìm kiếm được
giả sử là duy nhất6. Hình 8 minh họa một nút trong một cây tìm kiếm. Hai ràng
buộc phải ln được thỏa mãn trong cây tìm kiếm là:
1. Trong mỗi nút, K1  K2  …  Kq-1.
2. Đối với tất cả các giá trị X trong cây con được trỏ bởi Pi, chúng ta có
Ki-1  X  Ki với 1  i  q; X  Ki với i = 1; Ki-1  X với i = q (xem hình 8)

Hình 8. Một nút trong cây tìm kiếm với các con trỏ trỏ đến các cây con bên dưới
Mỗi khi chúng ta tìm một giá trị X, chúng ta duyệt theo con trỏ Pi thích
hợp, dựa theo công thức trong điều kiện 2 ở trên. Hình 9 minh họa một cây tìm
kiếm bậc p = 3 và các giá trị tìm kiếm kiểu nguyên. Chú ý rằng một số con trỏ
Pi trong một nút có thể là các con trỏ NULL.
6

Ràng buộc này có thể được nới lỏng. Nếu lập chỉ mục trên một trường khơng khóa, có thể có các giá trị tìm
kiếm trùng nhau, cấu trúc nút và các luật duyệt đối với cây có thể được điều chỉnh.

19



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×