Qui tắc duyệt cây đa cấp trên MS SQL Server
Số trang: 7
Loại file: pdf
Dung lượng: 138.66 KB
Lượt xem: 14
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Qui tắc duyệt cây đề cập ở đây là theo chiều sâu, duyệt từ trái sang phải, thứ tự duyệt được thể hiện bằng các chữ số bên trong các node ở hình 1. Bảng Tree lưu trữ thông tin của cây đa cấp có cấu trúc như sau: Column Name NodeID NodeName ParentID WoodenLeg Data Type Int varchar Int varchar Size 20 100 Allow Null No No Yes Yes Description Khóa chính của bảng Tree Tên node Mã của node cha gần nhất Cột giả hỗ trợ khi sắp xếp dữ liệu...
Nội dung trích xuất từ tài liệu:
Qui tắc duyệt cây đa cấp trên MS SQL Server Duyệt cây đa cấp trên MS SQL ServerQui tắc duyệt cây đề cập ở đây là theo chiều sâu, duyệt từ trái sang phải, thứ tựduyệt được thể hiện bằng các chữ số bên trong các node ở hình 1.Bảng Tree lưu trữ thông tin của cây đa cấp có cấu trúc nh ư sau: Column Data Allow Size Description Name Type Null Khóa chính c ủa bảng Tree NodeID Int No NodeName varchar 20 No Tên node Mã của node cha gần nhất ParentID Int Yes Cột giả hỗ trợ khi sắp xếp dữ WoodenLeg varchar 100 Yes liệuScrip tạo bảng Tree như sau:Create Table Tree(NodeID int Primary Key,NodeName varchar(20) Not Null,ParentID int Null,WoodenLeg varchar(100) Null);Dữ liệu trong bảng Tree mô tả cây đa cấp ở hình 1 được thể hiện ở hình 2. Quitắc tạo dữ liệu như sau:NodeName NodeName ParentID WoodenLeg 1 Root Node Null 1 2 Node 1 1 12 3 Node 2 1 13 4 Node 3 1 14 5 Node 4 1 15 6 Node A 2 126 7 Node B 2 127 8 Node C 3 138 9 Node D 3 139 10 Node E 3 1310 11 Node F 5 1511 12 Node G 5 1512 13 Node X 11 151113 14 Node Y 11 151114 15 Node Z 11 151115Hình 2: Dữ liệu mô tả cấu trúc cây đa cấp(Đừng quan tâm đến giá trị columnWoodenLeg, tôi sẽ giải thích ở phần sau)* NodeID của node cha sẽ nhỏ hơn NodeID của node con. Đối với các nodecùng cấp, NodeID của node trái sẽ nhỏ h ơn NodeID c ủa node phải.Đọc đến đây, các bạn có thể thắc mắc nếu NodeID của một cây có sẵn có giátrị không thoả điều kiện trên thì chúng ta có sắp xếp được hay không. Câu trảlời là hoàn toàn có thể, vì khi đó chúng ta có thể tạo thêm một column mới vớicác giá trị thoả điều kiện. Vì muốn giữ tính đơn giản cho bài viết nên cho phéptôi không nêu ra cách tính cho trường hợp này. Nếu có bất kỳ thắc mắc gì, cácbạn có thể liên hệ trực tiếp với tôi.* Đối với node gốc (Root Node) thì ParentID = Null. Các node th ứ cấp còn lạisẽ có ParentID bằng NodeID của node cha gần nhất.Chúng ta dễ dàng nhận thấy, không thể sử dụng bất kỳ các cột NodeID hayNodeName hay ParentID để hiển thị danh sách các Node theo thứ tự duyệttrên. Trong bài vi ết này, tôi sẽ dùng cột WoodenLeg với các giá trị đặc biệt đểlàm việc đó. Giá trị cột WoodenLeg đ ược tính như sau:* Nếu là node gốc (Root Node) thì WoodenLeg = NodeID* Các node thứ cấp còn lại thì WoodenLeg = WoodenLeg c ủa node cha gầnnhất + NodeID của node đó. (dấu + trong biểu thức trên là phép ghép/c ộngchuỗi ký tự)Với cách tính trên, ta tính được giá trị cột WoodenLeg cho từng node nh ư sau: Biểu thức Kết quả Mô t ả NodeName Vì nó là node gốc Root node 1 1 - 1 là giá trị của cột WoodenLeg của node cha của Node 1 1+2 12 Node 1 (Root Node) - 2 là NodeID của Node 1 - Giải thích tương tự Node 2 1+3 13 ... Hình 3: Bảng mô tả cách tính giá trị cột WoodenLeg (Các bạn có thể xem giá trị WoodenLeg của tất cả các node ở hình 2)Script để tính giá trị cột WoodenLeg:* Trường hợp 1: Cập nhật ngay cột n ày khi vừa thêm 1 node vào cây§ Khi thêm node gốc:Insert Into TreeValues (1, Root Node, Null, 1);§ Khi thêm node thứ cấp:Insert Into TreeValues(2, Node 1, 1, Null); -- Node 1 là node con c ủa Root NodeUpdate TreeSet Tree.WoodenLeg = Cast(T.WoodenLeg As varchar(100)) +Cast(Tree.NodeID As varchar(100))From Tree, Tree TWhere (Tree.ParentID = T.NodeID) And(Tree.NodeID = 2); -- 2 là NodeID của Node 1 vừa-- được thêm vào table Tree* Trường hợp 2: Cập nhật giá trị cột này khi có nhu cầu hiển thị theo thứ tựduyệt cây-- Xóa tất cả giá trị của cột WoodenLeg trong bảngUpdate TreeSet WoodenLeg = Null;-- Gán giá trị column WoodenLeg cho node gốcUpdate TreeSet WoodenLeg = NodeIDWhere ParentID Is Null;-- Node có ParentID = Null là node g ốc/* Gán giá trị cột WoodenLeg cho các node thứ cấpỨng với mỗi lần lặp ta tính được giá trị cho các node ở cấp t ương ứngVí dụ ở lần lặp đầu tiên, ta tính được giá trị cho các node cấp 1, baogồm: Node 1, Node 2, Node 3, Node 4.*/While (1=1) -- Điều kiện thoát được thể hiện bên trong vòng lặpBeginUpdate TreeSet Tree.WoodenLeg =Cast(T.WoodenLeg As varchar(100))+Cast(Tree.NodeID As varchar(100))From Tree, Tree TWhere (Tree.ParentID = T.NodeID) And(Tree.WoodenLeg Is Null);If (@@RowCount = 0)-- Đã tính xong giá trị WoodenLeg cho-- tất cả các node trong bảng TreeBreak;EndSau khi tính toán xong giá trị cho cột WoodenLeg, chúng ta viết script để hiểnthị danh sách theo thứ tự duyệt cây nh ư được yêu cầu:Select NodeName, WoodenLegFrom TreeOrder By WoodenLeg;Và kết quả thu được như mô tả trong hình 4. Sở dĩ chúng ta có được kết quảnày là do c ột WoodenLeg có kiểu dữ liệu là varchar nên khi so sánh các giá trịđể xác định trình tự hiển thị nó sẽ tiến hành so sánh theo kiểu chuỗi ký tự.Chuỗi 126 của Node A sẽ nhỏ hơn chuỗi 13 của node 2 nên Node A sẽđứng trước Node 2 trong danh sách.Như vậy thứ tự duyệt cây thông qua phát biểu ...
Nội dung trích xuất từ tài liệu:
Qui tắc duyệt cây đa cấp trên MS SQL Server Duyệt cây đa cấp trên MS SQL ServerQui tắc duyệt cây đề cập ở đây là theo chiều sâu, duyệt từ trái sang phải, thứ tựduyệt được thể hiện bằng các chữ số bên trong các node ở hình 1.Bảng Tree lưu trữ thông tin của cây đa cấp có cấu trúc nh ư sau: Column Data Allow Size Description Name Type Null Khóa chính c ủa bảng Tree NodeID Int No NodeName varchar 20 No Tên node Mã của node cha gần nhất ParentID Int Yes Cột giả hỗ trợ khi sắp xếp dữ WoodenLeg varchar 100 Yes liệuScrip tạo bảng Tree như sau:Create Table Tree(NodeID int Primary Key,NodeName varchar(20) Not Null,ParentID int Null,WoodenLeg varchar(100) Null);Dữ liệu trong bảng Tree mô tả cây đa cấp ở hình 1 được thể hiện ở hình 2. Quitắc tạo dữ liệu như sau:NodeName NodeName ParentID WoodenLeg 1 Root Node Null 1 2 Node 1 1 12 3 Node 2 1 13 4 Node 3 1 14 5 Node 4 1 15 6 Node A 2 126 7 Node B 2 127 8 Node C 3 138 9 Node D 3 139 10 Node E 3 1310 11 Node F 5 1511 12 Node G 5 1512 13 Node X 11 151113 14 Node Y 11 151114 15 Node Z 11 151115Hình 2: Dữ liệu mô tả cấu trúc cây đa cấp(Đừng quan tâm đến giá trị columnWoodenLeg, tôi sẽ giải thích ở phần sau)* NodeID của node cha sẽ nhỏ hơn NodeID của node con. Đối với các nodecùng cấp, NodeID của node trái sẽ nhỏ h ơn NodeID c ủa node phải.Đọc đến đây, các bạn có thể thắc mắc nếu NodeID của một cây có sẵn có giátrị không thoả điều kiện trên thì chúng ta có sắp xếp được hay không. Câu trảlời là hoàn toàn có thể, vì khi đó chúng ta có thể tạo thêm một column mới vớicác giá trị thoả điều kiện. Vì muốn giữ tính đơn giản cho bài viết nên cho phéptôi không nêu ra cách tính cho trường hợp này. Nếu có bất kỳ thắc mắc gì, cácbạn có thể liên hệ trực tiếp với tôi.* Đối với node gốc (Root Node) thì ParentID = Null. Các node th ứ cấp còn lạisẽ có ParentID bằng NodeID của node cha gần nhất.Chúng ta dễ dàng nhận thấy, không thể sử dụng bất kỳ các cột NodeID hayNodeName hay ParentID để hiển thị danh sách các Node theo thứ tự duyệttrên. Trong bài vi ết này, tôi sẽ dùng cột WoodenLeg với các giá trị đặc biệt đểlàm việc đó. Giá trị cột WoodenLeg đ ược tính như sau:* Nếu là node gốc (Root Node) thì WoodenLeg = NodeID* Các node thứ cấp còn lại thì WoodenLeg = WoodenLeg c ủa node cha gầnnhất + NodeID của node đó. (dấu + trong biểu thức trên là phép ghép/c ộngchuỗi ký tự)Với cách tính trên, ta tính được giá trị cột WoodenLeg cho từng node nh ư sau: Biểu thức Kết quả Mô t ả NodeName Vì nó là node gốc Root node 1 1 - 1 là giá trị của cột WoodenLeg của node cha của Node 1 1+2 12 Node 1 (Root Node) - 2 là NodeID của Node 1 - Giải thích tương tự Node 2 1+3 13 ... Hình 3: Bảng mô tả cách tính giá trị cột WoodenLeg (Các bạn có thể xem giá trị WoodenLeg của tất cả các node ở hình 2)Script để tính giá trị cột WoodenLeg:* Trường hợp 1: Cập nhật ngay cột n ày khi vừa thêm 1 node vào cây§ Khi thêm node gốc:Insert Into TreeValues (1, Root Node, Null, 1);§ Khi thêm node thứ cấp:Insert Into TreeValues(2, Node 1, 1, Null); -- Node 1 là node con c ủa Root NodeUpdate TreeSet Tree.WoodenLeg = Cast(T.WoodenLeg As varchar(100)) +Cast(Tree.NodeID As varchar(100))From Tree, Tree TWhere (Tree.ParentID = T.NodeID) And(Tree.NodeID = 2); -- 2 là NodeID của Node 1 vừa-- được thêm vào table Tree* Trường hợp 2: Cập nhật giá trị cột này khi có nhu cầu hiển thị theo thứ tựduyệt cây-- Xóa tất cả giá trị của cột WoodenLeg trong bảngUpdate TreeSet WoodenLeg = Null;-- Gán giá trị column WoodenLeg cho node gốcUpdate TreeSet WoodenLeg = NodeIDWhere ParentID Is Null;-- Node có ParentID = Null là node g ốc/* Gán giá trị cột WoodenLeg cho các node thứ cấpỨng với mỗi lần lặp ta tính được giá trị cho các node ở cấp t ương ứngVí dụ ở lần lặp đầu tiên, ta tính được giá trị cho các node cấp 1, baogồm: Node 1, Node 2, Node 3, Node 4.*/While (1=1) -- Điều kiện thoát được thể hiện bên trong vòng lặpBeginUpdate TreeSet Tree.WoodenLeg =Cast(T.WoodenLeg As varchar(100))+Cast(Tree.NodeID As varchar(100))From Tree, Tree TWhere (Tree.ParentID = T.NodeID) And(Tree.WoodenLeg Is Null);If (@@RowCount = 0)-- Đã tính xong giá trị WoodenLeg cho-- tất cả các node trong bảng TreeBreak;EndSau khi tính toán xong giá trị cho cột WoodenLeg, chúng ta viết script để hiểnthị danh sách theo thứ tự duyệt cây nh ư được yêu cầu:Select NodeName, WoodenLegFrom TreeOrder By WoodenLeg;Và kết quả thu được như mô tả trong hình 4. Sở dĩ chúng ta có được kết quảnày là do c ột WoodenLeg có kiểu dữ liệu là varchar nên khi so sánh các giá trịđể xác định trình tự hiển thị nó sẽ tiến hành so sánh theo kiểu chuỗi ký tự.Chuỗi 126 của Node A sẽ nhỏ hơn chuỗi 13 của node 2 nên Node A sẽđứng trước Node 2 trong danh sách.Như vậy thứ tự duyệt cây thông qua phát biểu ...
Tìm kiếm theo từ khóa liên quan:
Lý thuyết tin học SQL Tin học đại cương giáo trình Tin học đại cương bài giảng Tin học đại cương tài liệu Tin học đại cương lý thuyết Tin học đại cươngGợi ý tài liệu liên quan:
-
Ứng dụng công cụ Quizizz thiết kế trò chơi học tập trong giảng dạy học phần tin học đại cương
12 trang 284 0 0 -
Tài liệu hướng dẫn thực hành Tin học đại cương - ĐH Bách Khoa Hà Nội
40 trang 248 0 0 -
Giáo trình Tin học đại cương part 7
19 trang 209 0 0 -
Giáo trình Tin học đại cương: Phần 1 - ĐH Kinh tế Quốc Dân
130 trang 146 0 0 -
Giáo trình Tin học đại cương (Tái bản năm 2020): Phần 1 - PGS.TS. Nguyễn Thị Thu Thủy (Chủ biên)
105 trang 136 0 0 -
Hướng dẫn thực hành lập trình C trên Visual Studio
9 trang 123 0 0 -
Giáo trình Tin học đại cương: Phần 1 - Vi Hồng Thắm
90 trang 112 0 0 -
Trắc nghiệm và đáp án hệ cơ sở dữ liệu - ĐH Công Nghiệp Tp. Hồ Chí Minh
63 trang 105 0 0 -
Đề cương học phần Tin học đại cương
23 trang 101 0 0 -
Quản trị người dùng trong Exchange 2007 bằng Powershell
9 trang 94 0 0