Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Những cách đã biết để lưu trữ cấu trúc cây trong DB quan hệ là gì?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. đặt sql_mode toàn cục trong mysql

  2. MySQL COT () Hàm - Trả về Cotangent của một số trong MySQL

  3. Sử dụng MariaDB

  4. Cảnh báo:Không thể sửa đổi thông tin tiêu đề - tiêu đề đã được gửi do lỗi

  5. Ví dụ QUARTER () - MySQL