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

Thiết kế cơ sở dữ liệu:Các tùy chọn EAV?

Mặc dù tối giản như được hiển thị, bảng thuộc tính của Model2 giới thiệu khái niệm về siêu dữ liệu vào hỗn hợp, với tất cả những gì tốt đẹp có được từ nó. Có những lợi thế khác đối với Model2, chẳng hạn như hiệu suất tăng được liên kết với kích thước hàng nhỏ hơn (của bảng Giá trị), nhưng tôi muốn tập trung vào khái niệm siêu dữ liệu.

Ngay cả nguyên trạng Bảng thuộc tính của Model2 tạo thành kho lưu trữ tất cả các thuộc tính hợp lệ (với model1, người ta sẽ cần chạy một truy vấn tổng hợp các loại để có được danh sách như vậy). Ngoài ra, và nguyên trạng , hệ thống lưu trữ đủ để giới thiệu các ràng buộc khóa ngoại để giúp duy trì tính toàn vẹn của tập dữ liệu (với Mô hình 1, người ta sẽ cần các hình thức xác thực bên ngoài của các giá trị được lưu trữ trong cột thuộc tính.

Với một vài bổ sung đơn giản, bảng thuộc tính có thể trở thành một kho lưu trữ đa năng có thể được sử dụng cho nhiều mục đích khác nhau. Ví dụ, bảng có thể bao gồm một số điều sau đây

  • thông tin chẳng hạn như tên thân thiện với hiển thị của từng thuộc tính
  • một số cờ chỉ ra loại trường (số so với chuỗi so với ngày, v.v.), để xử lý / xử lý phân biệt
  • bảng Giá trị cụ thể nơi lưu trữ thuộc tính cơ bản (Mô hình chỉ hiển thị một bảng nhưng việc tối ưu hóa / chia tỷ lệ đôi khi nhắc việc chia nhỏ các bảng)
  • thực tế là thuộc tính có thể được lưu trữ dưới dạng cột riêng của nó trong bảng "Giá trị" (một lần nữa là một hình thức tối ưu hóa, về cơ bản là tận dụng tốt nhất của cả hai thế giới:tính linh hoạt của giản đồ của mô hình EAV nhưng hiệu suất của mô hình quan hệ cho các thuộc tính được sử dụng nhiều nhất và / hoặc phổ biến nhất đối với tất cả các thực thể.
  • khả năng đổi tên các thuộc tính mà không làm ảnh hưởng đến bảng chính. Các thay đổi chỉ ở cấp siêu dữ liệu.
  • ngữ nghĩa hướng ứng dụng khác nhau. Ví dụ, các chỉ báo cho thấy một thuộc tính cụ thể nên được cung cấp làm một trong các trường tìm kiếm cơ bản so với nâng cao.

Tóm lại, bảng thuộc tính trở thành tài nguyên cho phép ứng dụng thực sự theo hướng dữ liệu (hay chính xác hơn là meta hướng dữ liệu). Thật vậy, bạn cũng có thể thích một bảng thực thể, tức là một bảng mà siêu dữ liệu liên quan đến các loại thực thể khác nhau được tập hợp:đó là các loại thực thể khác nhau, thuộc tính nào được phép cho loại thực thể nào, v.v.

Bây giờ ... hãy chú ý đến nhận xét từ zerkms , bên dưới chính câu hỏi. Vì tất cả những lợi ích của nó, mô hình EAV cũng đi kèm với những hạn chế và thách thức, như gợi ý về sự phức tạp của các truy vấn và cả các vấn đề về hiệu suất. Tuy nhiên, những lo ngại này không nên loại bỏ EAV:có nhiều trường hợp sử dụng mà EAV là một cách tiếp cận tốt hơn.
Giả sử EAV là sự lựa chọn thì Model2, hoặc thậm chí một thứ gì đó phức tạp hơn rõ ràng là ưu việt hơn so với model1.



  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ạo cơ sở dữ liệu mới với MySQL Workbench

  2. SQLException:không thể sử dụng phương thức executeQuery để cập nhật

  3. MYSQL và mệnh đề LIMIT

  4. Sql - đếm thành nhiều cột

  5. NHÓM THEO sau khi ĐẶT HÀNG THEO