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

Quá nhiều bảng; MySQL chỉ có thể sử dụng 61 bảng trong một phép nối

Bạn đang sử dụng thiết kế EAV và đang cố gắng tạo lại một hàng từ một số thuộc tính khác nhau. Điều này chỉ ra một trong nhiều mìn bạn sẽ gặp phải khi sử dụng thiết kế EAV:có một giới hạn thực tế về số lượng phép nối mà bạn có thể thực hiện trong một truy vấn SQL.

Đặc biệt là trong MySQL - có một giới hạn khó, như bạn đã tìm thấy. Nhưng ngay cả trong các thương hiệu RDBMS khác, vẫn có một giới hạn hiệu quả vì chi phí nối là hình học so với số lượng bảng.

Nếu bạn sử dụng EAV, đừng cố tạo lại một hàng trong SQL như thể bạn có một thiết kế cơ sở dữ liệu thông thường. Thay vào đó, hãy tìm nạp các thuộc tính dưới dạng hàng, được sắp xếp theo id thực thể. Sau đó, xử lý chúng trong mã ứng dụng của bạn. Điều này có nghĩa là bạn không thể kết xuất dữ liệu trong một bước - bạn phải viết mã để lặp qua các hàng thuộc tính và cải tổ từng hàng dữ liệu trước khi bạn có thể xuất ra.

EAV không phải là một thiết kế cơ sở dữ liệu thuận tiện. Có nhiều nhược điểm đắt tiền khi sử dụng nó và bạn vừa gặp phải một trong số chúng.

Xem http://www.simple-talk.com/opinion / idea-piece / bad-carma / để có một câu chuyện tuyệt vời về việc sử dụng EAV đã hủy diệt một doanh nghiệp như thế nào.

Và cũng có thể xem http://en.wikipedia.org/wiki/Inner-platform_effect vì EAV là một ví dụ về kiểu Chống này.

Tôi hiểu sự cần thiết phải hỗ trợ một tập hợp các thuộc tính động cho mỗi sản phẩm trong một danh mục. Nhưng EAV sẽ giết ứng dụng của bạn. Đây là những gì tôi làm để hỗ trợ các thuộc tính động:

  • Xác định một cột thực trong bảng cơ sở cho từng thuộc tính chung cho tất cả các loại sản phẩm. Tên sản phẩm, giá cả, số lượng trong kho, v.v. Làm việc chăm chỉ để hình dung về sản phẩm chuẩn để bạn có thể bao gồm nhiều thuộc tính nhất có thể trong tập hợp này.

  • Xác định thêm một cột thuộc loại TEXT cho tất cả các thuộc tính bổ sung của từng loại sản phẩm nhất định. Lưu trữ trong cột này dưới dạng LOB được tuần tự hóa thuộc tính, ở bất kỳ định dạng nào phù hợp với bạn:XML, JSON, YAML, DSL tự chế của riêng bạn, v.v.

    Coi đây là một cột duy nhất trong các truy vấn SQL của bạn. Bất kỳ tìm kiếm, sắp xếp hoặc hiển thị nào bạn cần thực hiện dựa trên các thuộc tính này đều yêu cầu bạn tìm nạp toàn bộ TEXT blob vào ứng dụng của bạn deserialize nó và phân tích các thuộc tính bằng cách sử dụng mã ứng dụng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Giá trị mặc định không hợp lệ cho TIMESTAMP

  2. Lệnh gọi cơ sở dữ liệu không đồng bộ Node JS

  3. chèn dữ liệu XML vào mysql bằng php

  4. TRANG NGÂN HÀNG HIỂN THỊ KẾT QUẢ ECHO MYSQL

  5. Truy vấn sắp xếp theo ba ký tự cuối cùng của một cột