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

Thiết kế bảng thực thể-thuộc tính-giá trị

Tôi sẽ đưa ra một ý kiến ​​trái ngược với hầu hết các ý kiến ​​về câu hỏi này. Trong khi EAV là EVIL vì tất cả những lý do mà bạn có thể tìm thấy được giải thích kỹ lưỡng nhiều lần ở đây trên SO và DBA.SE và những nơi khác, có một ứng dụng thực sự phổ biến mà hầu hết những điều sai với EAV phần lớn là không liên quan và (một vài) lợi thế của EAV rất nhiều nước. Ứng dụng đó là danh mục sản phẩm trực tuyến.

Vấn đề chính với EAV là nó không cho phép cơ sở dữ liệu làm những gì nó thực sự tốt đang làm, điều này đang giúp cung cấp ngữ cảnh thích hợp cho các thuộc tính khác nhau của thông tin về các thực thể khác nhau bằng cách sắp xếp chúng trong một lược đồ .> . Việc có một lược đồ mang lại rất nhiều lợi ích xung quanh việc truy cập, diễn giải và thực thi tính toàn vẹn của dữ liệu của bạn.

Thực tế về danh mục sản phẩm là các thuộc tính của sản phẩm hầu như hoàn toàn không liên quan đến hệ thống danh mục chinh no. Hệ thống danh mục sản phẩm thực hiện (nhiều nhất) ba việc với các thuộc tính sản phẩm.

  1. Hiển thị các thuộc tính sản phẩm trong danh sách cho người dùng cuối ở dạng:{tên thuộc tính}:{giá trị thuộc tính}.

  2. Hiển thị các thuộc tính của nhiều sản phẩm trong một lưới so sánh trong đó các thuộc tính của các sản phẩm khác nhau xếp hàng với nhau (sản phẩm thường là cột, thuộc tính thường là hàng)

  3. Thúc đẩy các quy tắc cho một thứ gì đó (ví dụ:định giá) dựa trên các kết hợp thuộc tính / giá trị cụ thể.

Nếu tất cả những gì hệ thống của bạn làm là đưa ra thông tin không liên quan về mặt ngữ nghĩa (với hệ thống) thì lược đồ cho thông tin này về cơ bản là vô ích. Trên thực tế, lược đồ cản trở trong danh mục sản phẩm trực tuyến, đặc biệt nếu danh mục của bạn có nhiều loại sản phẩm đa dạng, vì bạn luôn phải quay lại lược đồ để chỉnh sửa nó để cho phép các danh mục sản phẩm hoặc loại thuộc tính mới.

Do cách nó được sử dụng, ngay cả kiểu dữ liệu của một giá trị thuộc tính trong danh mục sản phẩm cũng không nhất thiết (quan trọng). Đối với một số thuộc tính, bạn có thể muốn áp đặt các quy tắc đối lập, chẳng hạn như "phải là một số" hoặc "phải đến từ danh sách này {...}". Điều đó phụ thuộc vào mức độ quan trọng của tính nhất quán thuộc tính đối với danh mục của bạn và mức độ phức tạp mà bạn muốn triển khai. Nhìn vào danh mục sản phẩm của một số nhà bán lẻ trực tuyến, tôi có thể nói rằng hầu hết đều chuẩn bị đánh đổi sự đơn giản để có được sự nhất quán.

Có, EAV là xấu, ngoại trừ trường hợp không phải vậy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng các chỉ mục để cải thiện hiệu suất truy vấn MySQL

  2. Cách trả về kết quả truy vấn dưới dạng danh sách được phân tách bằng dấu phẩy trong MySQL

  3. Quản lý MySQL với phpMyAdmin trên Ubuntu 10.10 (Maverick)

  4. Xuất MySQL vào outfile:Các ký tự thoát CSV

  5. Cách hàm INSTR () hoạt động trong MySQL