Hơ sờ lô, hê sờ ly ly ^~^. My name is Chi. Today, I will introduce everyone to the EAV database model.
Với dự án 遺影, khi nhận được spec từ khách hàng thì đã có một bài toán khách hàng yêu cầu là : dự án iei sẽ bán nhiều sản phẩm, và các trường thông tin nhập dữ liệu của các sản phẩm đó, trong tương lai có thể thay đổi. Nếu chúng ta xử lý theo cách truyền thống, thì trong tương lai khi khách hàng thay đổi spec, thì liệu phương án lúc đó sẽ như thế nào ?? Đập đi xây lại dự án, hay phải thay đổi các label, column trong database. Vì thế, dự án 遺影 đã sử dụng mô hình cơ sở dữ liệu EAV. Vậy nó có gì đặc biệt mà các "sếp", "leader" lại quyết định chọn nó :vv. Chúng ta cùng đi tìm hiểu qua về nó nhé!
1: Giới thiệu về mô hình cơ sở dữ liệu EAV
- Mô hình csdl EAV viết đầy đủ là Entity-Attribute-Value Pattern
- Điểm mạnh của mô hình cơ sở dữ liệu này là có tính tùy biến tính mở rộng cao, không bị dư thừa dữ liệu
Ví dụ để chứng minh điểm mạnh của nó trong dự án 遺影
Hiện tại, dự án đang cung cấp 8 sản phẩm, mỗi sản phẩm sẽ có những trường dữ liệu khác nhau. Thông thường chúng ta sẽ thiết kế có một bảng products, trong bảng đó sẽ chứa các cột là thuộc tính của các sản phẩm đấy. Tuy nhiên, trong tương lai khi khách hàng yêu cầu thêm sản phẩm, và những sản phẩm đó lại có những thuộc tính khác nhau. Không lẽ chúng ta sẽ thêm các cột vào bảng products đó. Điều đó sẽ dẫn đến kích thước bảng bị phình to lên và dư thừa dữ liệu không cần thiết.
2: Áp dụng mô hình EAV trong giải quyết bài toán
Để giải quyết bài toán trên, thay vì chúng ta tiến hành lưu trữ dữ liệu sản phẩm và các thuộc tính của nó vào bảng products, thì chúng ta có thể tách ra và lưu trữ một cách khoa học hơn. Chúng ta sẽ tạo ra ba bảng tương ứng với entity - attribute-value
- Bảng entities : Lưu thông tin của các product, những thuộc tính chung nhất của các product đó như (name, price...)
- Bảng attributes: Bảng này sẽ lưu thông tin các thuộc tính chúng ta sẽ thêm vào của các sản phẩm (attributename, id ...)
- Bảng attribute_values : Bảng này sẽ chứa thông tin của entity và attribute cũng như giá trị của nó (entity_id, attribute_id, value...)
Format sẽ như hình dưới đây:
3: Cách đổ các thuộc tính ra dữ liệu
Vì khi sử dụng mô hình cơ sở dữ liệu EAV, các thuộc tính của sản phẩm có thể thêm động mà không phải tĩnh như thông thường. Do đó, thay vì tạo các file blade view với các trường dữ liệu cố định, thì chúng ta sẽ tiến hành đổ giao diện dựa theo database, và phần xử lí này sẽ tiến hành trong service.
(Chi tiết xử lí mọi người có thể liên hệ leader 遺影 a. Nong Hai Ha ạ!)
Nếu mọi người muốn tìm hiểu kỹ hơn về mô hình này, có thể truy cập và đường link bên dưới và tiến hành test thử nhé! Rất thú vị đó ạ!!
[ username : admin
password: admin123 ]
http://devphp70.bsscommerce.com/magento214/admin/catalog/category/add/key/0f34e89f4555e5e13ed32ca56289c9d2d2e7f21d5b785ab21707ccbce228ed13/store/0/parent/1
Mong nhận được sự ủng hộ của mọi người để em/mình có động lực viết các bài tiếp theo ạ ~.~