Như mọi khi:không có giải pháp tốt nhất. Mỗi giải pháp làm cho những việc khác nhau trở nên dễ dàng hơn hoặc khó hơn. Giải pháp phù hợp cho bạn phụ thuộc vào thao tác bạn sẽ thực hiện nhiều nhất.
Phương pháp tiếp cận ngây thơ với id gốc:
Ưu điểm:
-
Dễ thực hiện
-
Dễ dàng di chuyển một cây con lớn sang cây mẹ khác
-
Chèn rẻ
-
Các trường cần thiết có thể truy cập trực tiếp trong SQL
Nhược điểm:
-
Việc truy xuất toàn bộ cây là đệ quy và do đó tốn kém
-
Việc tìm kiếm tất cả các bậc cha mẹ cũng rất tốn kém (SQL không biết đệ quy ...)
Truyền tải cây đặt hàng trước đã sửa đổi (lưu điểm đầu và điểm cuối):
Ưu điểm:
-
Lấy cả cây thật dễ dàng và rẻ
-
Tìm tất cả các bậc cha mẹ rất rẻ
-
Các trường cần thiết có thể truy cập trực tiếp trong SQL
-
Phần thưởng:bạn cũng đang lưu thứ tự của các nút con trong nút mẹ của nó
Nhược điểm:
- Chèn / Cập nhật có thể rất tốn kém, vì bạn có thể phải cập nhật rất nhiều nút
Lưu đường dẫn trong mỗi Nút:
Ưu điểm:
-
Tìm tất cả các bậc cha mẹ rất rẻ
-
Lấy cả cây rẻ
-
Chèn rẻ
Nhược điểm:
-
Di chuyển cả một cái cây rất tốn kém
-
Tùy thuộc vào cách bạn lưu đường dẫn, bạn sẽ không thể làm việc với nó trực tiếp trong SQL, vì vậy bạn sẽ luôn cần tìm nạp và phân tích cú pháp, nếu bạn muốn thay đổi nó.
Bảng đóng cửa
Ưu điểm:
-
Dễ thực hiện
-
Tìm tất cả các bậc cha mẹ rất rẻ
-
Chèn rẻ
-
Lấy cả cây giá rẻ
Nhược điểm:
-
Cần một bảng bổ sung
-
Chiếm nhiều không gian so với các cách tiếp cận khác
-
Di chuyển một cây con rất tốn kém
Tôi thích một trong hai cách cuối cùng, tùy thuộc vào tần suất thay đổi dữ liệu.
Xem thêm: http://media.pragprog.com/titles/bksqla/trees. pdf