Nếu bạn biết hầu hết các thuộc tính mà sản phẩm của bạn sẽ có trước thời hạn, bạn có thể mã hóa chúng vào các bảng cho các loại sản phẩm khác nhau, chẳng hạn như:
sách
-----
Tôi
giá bán
tiêu đề
tác giả
isbn
Vân vân....
thiết bị di động
-------------
Tôi
giá bán
kích thước
màu sắc
mô hình
Vân vân...
Bạn cũng có thể thử một cái gì đó như thế này:
cơ sở
------------
Tôi
cơ sở
Loại sản phẩm
book_product_attribut
-----------------------
base_product_id (FK đến base_product)
tiêu đề
tác giả
mobile_dev_product_attribut
-----------------------------
base_product_id (FK đến base_product)
mô hình
màu sắc
Bằng cách này, bạn có thể nhóm các thuộc tính phổ biến của mình trong bảng sản phẩm cơ sở và các thuộc tính cụ thể hơn được lưu trữ trong các bảng khác khi cần thiết.
Điều này sẽ hoạt động nếu các loại sản phẩm của bạn chủ yếu là tĩnh. Mặt khác, nếu bạn không biết loại sản phẩm hoặc thuộc tính nào bạn sẽ cần trong tương lai và hệ thống dựa trên giá trị thuộc tính thực thể có thể hoạt động tốt hơn. Ý tưởng đằng sau mô hình đó là bạn có một bảng cho các thuộc tính khác nhau mà bạn có thể có, một bảng cho các thực thể khác nhau trong hệ thống của bạn và bảng cho các giá trị thuộc tính mà thực thể có. Thí dụ:
thực thể
--------
Tôi
thuộc tính
----------
Tôi
Tên
giá trị
------
Tôi
ID phap nhân
property_id
giá trị
Dữ liệu có thể trông như thế này:
thực thể
TÔI
----
1
thuộc tính
ID | Tên
----------
1 | tiêu đề
2 | tác giả
giá trị
ID | thuộc tính_id | thực thể | giá trị
-------------------------------------------------- -------
1 | 1 | 1 | "Kỳ vọng lớn"
2 | 2 | 1 | "Charles Dickens"
Dữ liệu này mô tả rất ngắn gọn một sản phẩm có hai thuộc tính: tiêu đề và tác giả, với giá trị tương ứng là "Kỳ vọng lớn" và "Charles Dickens".
Xin lưu ý rằng việc sử dụng cơ sở dữ liệu EAV có thể khiến các truy vấn trở nên rất khó xử. Với đủ dữ liệu và thiết kế mô hình sai, bạn cũng có thể gặp vấn đề về hiệu năng. Ví dụ tôi đưa ra rất đơn giản nhưng thiết kế thực tế hơn có xu hướng phức tạp hơn thế. Có thể mất thời gian để có được loại cơ sở dữ liệu này chính xác và nó không phải luôn luôn là giải pháp tốt nhất.