Có một số lựa chọn thay thế để làm cho thông tin phân cấp dễ làm việc hơn trong SQL:
-
Biểu thức bảng phổ biến (theo tiêu chuẩn SQL-2003) hỗ trợ truy vấn SQL đệ quy chống lại kiểu dữ liệu id gốc mà bạn đang sử dụng. Cho đến nay, MySQL không hỗ trợ tính năng này. PostgreSQL 8.4, Microsoft SQL Server và IBM DB2 là những ví dụ về nhãn hiệu RDBMS hỗ trợ cú pháp CTE. Oracle cũng có một phần mở rộng độc quyền cho cú pháp SQL hỗ trợ các truy vấn đệ quy.
-
Bộ lồng nhau (giải pháp trái / phải mà @phantombrain đề cập) là một giải pháp được trình bày chi tiết trong cuốn sách "Cây và phân cấp trong SQL cho Smarties" của Joe Celko cũng như trong nhiều bài báo và bài đăng blog trên internet.
-
Liệt kê đường dẫn (hay còn gọi là Đường dẫn vật chất hóa) lưu trữ một chuỗi trong mỗi hàng trong hệ thống phân cấp để lưu ý đường dẫn tổ tiên của hàng đó. Kết hợp điều này với
LIKE
truy vấn để so sánh chuỗi đường dẫn với đường dẫn của tổ tiên và đường dẫn của con cháu. -
Bảng kết thúc (hay còn gọi là Quan hệ đóng cửa chuyển tiếp) sử dụng bảng thứ hai để lưu trữ tất cả các mối quan hệ tổ tiên - hậu duệ, không chỉ là quan hệ cha mẹ trực tiếp như trong thiết kế bạn đang sử dụng. Nhiều loại truy vấn trở nên dễ dàng hơn khi bạn đã lưu trữ tất cả các đường dẫn.
-
Giải pháp kết hợp cũng tồn tại. Ví dụ:lưu trữ id cha ngay lập tức như bạn đang làm, nhưng cũng lưu trữ gốc của cây. Giờ đây, bạn có thể lấy tất cả các hàng khác trong cùng một hệ thống phân cấp, tìm nạp chúng vào mã ứng dụng và sắp xếp cây với cấu trúc dữ liệu thông thường.