Trong cơ sở dữ liệu Tin, các đối tượng cơ sở là đỉnh và tam giác, trong đó yêu cầu truy vấn các tam giác có phần nhiều yêu cầu truy vấn các đỉnh do đó ta cần xây dựng một cây chỉ mục dùng chung cho cả hai loại đối tượng này.
Qua tìm hiểu họ cây R, ta chọn cấu trúc của cây X-Tree để xây dựng cây chỉ mục cho cơ sở dữ liệu Tin. Do những hạn chế về thời gian, chúng tôi không thể hiện thực đầu
đủ lớp cây X-Tree (cụ thể là không có split-history), mà chỉ xây dựng lớp cây tương tự
dựa trên cấu trúc và một số giải thuật của cây X-Tree, ta tạm gọi đó là cây G-Tree để phân biệt với các cây khác trong họ R-Tree..
a. Giải thuật chèn.
Giải thuật chèn một phần tử vào X-Tree là tương tự nhau đối với họ cây họ R-Tree.
Sau đây là giải thuật chèn một phần tử vào cây G-Tree ở dirnode, giải thuật này hơn khác với giải thuật chuNn của X-Tree để phù hợp với cấu trúc của G-Tree. Giải thuật
chèn phần tử của datanode cũng tương tự.
INSFLAG XDirNode::Insert(OBJ Obj, REGION& mbr, XNode** slibing)
{
XMBRSet s1, s2;
XNode *follow, *new_son;
int follow_idx;
INSFLAG return_value;
follow = ChooseSubTree(mbr,follow_idx);
return_value = follow->Insert(Obj, mbr , &new_son);
UpdateMBR(follow_idx,follow->calc_mbr());
if (return_value == IF_SPLIT) {
add_mbr(mbr,new_son);
if (num_of_mbrs() > CAPACITY ) { // overflow occur if (Split(s1,s2)==true) {
set_mbrs(s1);
Luận văn tốt nghiệp GVHH: Nguyễn Hữu Hải.
(*slibing)->set_mbrs(s2);
return IF_SPLIT;
}
else {
// Nod grow up e to supernode m_mbrs.capacity += PAGESIZE;
} }
};
} return IF_OK;
b. Giải thuật xóa
Để xóa một phần tử ra khỏi cây, việc đầu tiên là xác dịnh datanode chứa nó. Sau khi
loại bỏ phần tử này ra khỏi node, nếu số phần tử của datanode nhỏ hơn một giá trị nào
đó (MIN_FANOUT) thì ta cần phải xóa datanode này, các phần tử khác sẽ được chèn
lại vào cây để đảm bảo tính cân bằng của cây.
c. Giải thuật tách node. d. Giải thuật search.