Thiết kế Bộ lồng nhau chắc chắn là khó khi bạn cần cập nhật thường xuyên cho cây. Bạn sẽ phải đánh số lại các bộ phận lớn của cây.
Một gợi ý để giảm thiểu điều này là sử dụng số dấu phẩy động thay vì số nguyên. Nếu bạn chèn một nút mới trong cây, tương đối dễ dàng tìm thấy một số số FLOAT ở giữa các số tập hợp lồng nhau của nút cha của nút mới. Cuối cùng bạn có thể đạt đến giới hạn về độ chính xác của một số dấu phẩy động, nhưng vì cây của bạn không sâu nên sẽ không xảy ra trong một thời gian dài.
Một kỹ thuật khác mà tôi đã viết về tôi gọi là Bảng đóng cửa . Phương pháp lưu trữ phân cấp này giúp việc chèn / cập nhật / xóa các nút trong một cây lớn dễ dàng hơn nhiều mà không cần cập nhật nhiều cây của bạn. Và bạn vẫn có thể truy vấn toàn bộ cây hoặc bất kỳ cây con nào trong một truy vấn SQL không đệ quy.
Để đọc thêm về Bảng đóng cửa, hãy xem:
- Cách hiệu quả / thanh lịch nhất để phân tích cú pháp một bảng phẳng thành một cái cây là gì?
- Mô hình cho Dữ liệu phân cấp với SQL và PHP
- Phản vật chất SQL:Tránh cạm bẫy của lập trình cơ sở dữ liệu
Nhận xét lại của bạn:
Danh sách Liền kề rất đơn giản, có tối thiểu dư thừa và nó hỗ trợ các mối quan hệ FK, điều mà các Tập hợp lồng nhau thì không. Danh sách kề cận hỗ trợ truy vấn toàn bộ cây có độ sâu tùy ý nếu bạn sử dụng truy vấn đệ quy . Nhưng MySQL không hỗ trợ truy vấn đệ quy.
Nếu bạn chỉ cần truy vấn các mối quan hệ cha-con ngay lập tức (tức là một mức độ sâu) hoặc chỉ truy vấn các cây có độ sâu cố định, thì Danh sách gần kề là được.