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

Mô hình danh sách liền kề so với Mô hình tập hợp lồng nhau cho dữ liệu phân cấp MySQL?

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:

  1. 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.
  2. 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố mã hóa ký tự với PHP Trình phân tích cú pháp DOM HTML đơn giản

  2. Chuyển đổi mã MySQL thành Access:GROUP_CONCAT và một bộ ba JOIN

  3. Cách khóa một hàng để chọn trong MySQL

  4. Mẹo để cung cấp hiệu suất cơ sở dữ liệu MySQL - Phần thứ hai

  5. Lưu trữ các ngày không phải Gregorian trong loại ngày của Mysql