Mô hình Tập hợp lồng nhau ngày nay không thường được sử dụng trong cơ sở dữ liệu, vì nó phức tạp hơn Mô hình danh sách Adiacency, do thực tế là nó yêu cầu quản lý hai "con trỏ" thay vì một. Trên thực tế, Mô hình tập hợp lồng nhau đã được giới thiệu trong cơ sở dữ liệu khi nó phức tạp hoặc không thể thực hiện các truy vấn đệ quy đi qua một hệ thống phân cấp.
Từ năm 1999, SQL chuẩn bao gồm cái gọi là Biểu thức bảng chung đệ quy hoặc CTE đệ quy, giúp đơn giản hơn (và được chuẩn hóa!) Để thực hiện các truy vấn đi qua đường dẫn đệ quy trong một hệ thống phân cấp với bất kỳ số cấp độ.
Tất cả các hệ thống DBMS chính hiện đã bao gồm tính năng này, với một ngoại lệ đáng chú ý:MySQL. Nhưng trong MySQL, bạn có thể khắc phục vấn đề này với việc sử dụng các thủ tục được lưu trữ. Ví dụ:hãy xem bài đăng này trên StackOverflow hoặc bài đăng này trên dba.stackexchange .
Vì vậy, tóm lại, đây là những lời khuyên của tôi:
- Nếu bạn vẫn có thể quyết định sử dụng DBMS nào, hãy cân nhắc kỹ một số lựa chọn thay thế:ví dụ:nếu bạn muốn gắn bó với cơ sở dữ liệu nguồn mở, hãy sử dụng PostgreSQL , sử dụng Mô hình danh sách lần truy cập gần đây và sử dụng CTE đệ quy cho các truy vấn của bạn.
- Nếu bạn không thể thay đổi DBMS, bạn vẫn nên sử dụng Mô hình danh sách gần đây và sử dụng các quy trình được lưu trữ như những quy trình được trích dẫn trong tài liệu tham khảo.
CẬP NHẬT
Tình huống này đang thay đổi với MySQL 8, hiện đang được phát triển và sẽ tích hợp CTE đệ quy , để từ phiên bản đó, Mô hình danh sách Adiacency sẽ dễ sử dụng hơn.