Thiết kế lược đồ cho các sản phẩm có nhiều biến thể / thuộc tính?


11

Tôi đang sử dụng MySQL. Ý tưởng tương tự như shopify với một khái niệm khác, vì vậy người dùng sẽ thêm các sản phẩm của riêng họ với nhiều loại biến thể và thuộc tính.

Từ tất cả các nghiên cứu tôi đã thực hiện, đây dường như là giải pháp khả thi nhất đối với tôi và tôi chỉ tự hỏi liệu có điều gì sai với lược đồ sau không và những mặt trái / nhược điểm là gì?

Cảm ơn bạn

Table: products
------------------------------
| ID | ProductName           |
|----------------------------| 
| 1  | Leather Wallet Case   |
| 2  | Jeans                 |
| 3  | Power Bank            |



Table: products_variants
-------------------------------
| ID | ProductId | ParentId | Variant  | VariantName | SKU  | StockTotal | WholeSalePrice | BuyPrice | OnSale | OnSalePrice |
|---------------------------------------------------------------------------------------------------------------------------|
| 1  | 1         | null     | model    | iPhone5     | SKU  | 10         | 3              | 10       | null   | null        |
|---------------------------------------------------------------------------------------------------------------------------| 
| 2  | 1         | null     | model    | iPhone4     | null | null       | null           | null     | null   | null        |
| 3  | 1         | 2        | color    | Red         | SKU  | 10         | 3              | 10       | null   | null        |     
| 4  | 1         | 2        | color    | Blue        | SKU  | 10         | 3              | 10       | null   | null        |     
|---------------------------------------------------------------------------------------------------------------------------|
| 5  | 2         | null     | size     | M           | null | null       | null           | null     | null   | null        |
| 8  | 2         | 5        | color    | Black       | SKU  | 10         | 3              | 10       | null   | null        |
| 9  | 2         | null     | size     | XXL         | SKU  | 10         | 3              | 10       | null   | null        |
| 10 | 2         | 9        | material | Cotton      | null | null       | null           | null     | null   | null        |
| 11 | 2         | 10       | color    | Red         | SKU  | 10         | 3              | 10       | null   | null        |
| 12 | 2         | 10       | color    | Blue        | SKU  | 10         | 3              | 10       | null   | null        |
| 13 | 2         | 9        | material | Casmir      | null | null       | null           | null     | null   | null        |
| 14 | 2         | 13       | color    | Green       | SKU  | 10         | 3              | 10       | null   | null        |
| 15 | 2         | 13       | color    | Brown       | SKU  | 10         | 3              | 10       | null   | null        |    
|---------------------------------------------------------------------------------------------------------------------------|
| 13 | 3         | null     | null     | null        | SKU  | 10         | 3              | 10       | null   | null        |

1
Nhấp vào thẻ 'eav'.
Rick James

Tôi không quan tâm đến một giải pháp EAV đầy đủ. Sơ đồ tôi đã thiết kế nó sử dụng một số khái niệm về EAV nhưng không đầy đủ.
lesandru

Câu trả lời:


5

Đây chỉ là thông tin từ trả lời của @lesandru, tôi thực sự thấy nó rất hữu ích, vì vậy hãy ghi có cho anh ấy và @sahalMoidu

Áp dụng chuẩn hóa cho vấn đề của bạn, giải pháp được đưa ra. Chạy và xem nó trên Fiddle

Vĩ cầm

CREATE TABLE products 
    (
     product_id int auto_increment primary key, 
     name varchar(20), 
     description varchar(30)

    );

INSERT INTO products
(name, description)
VALUES
('Rug', 'A cool rug'  ),
('Cup', 'A coffee cup');

create table variants (variant_id int auto_increment primary key,
                       variant varchar(50)
                       );
insert into variants (variant)
values ('color'),('material'),('size') ;   
create table variant_value(value_id int auto_increment primary key, 
                           variant_id int ,
                           value varchar(50)
                           );

insert into variant_value (variant_id,value)
values (1 ,'red'),(1 ,'blue'),(1 ,'green'),
        (2 ,'wool'),(2 ,'polyester'),
        (3 ,'small'),(3 ,'medium'),(3 ,'large');



create table product_Variants( product_Variants_id int  auto_increment primary key,
                            product_id int,
                            productVariantName varchar(50),
                            sku varchar(50),
                            price float
                            );




create table product_details(product_detail_id int auto_increment primary key,
                             product_Variants_id int,

                             value_id int
                             );

insert into product_Variants(product_id,productVariantName,sku,price)
values (1,'red-wool' ,'a121',50);

insert into product_details(product_Variants_id , value_id)
values( 1,1),(1,4);

insert into product_Variants(product_id,productVariantName,sku,price)
values (1,'red-polyester' ,'a122',50);

insert into product_details(product_Variants_id , value_id)
values( 2,1),(2,5);


2

Lược đồ cơ sở dữ liệu cho nhiều loại sản phẩm

Giải pháp có tại đây: http://www.codingblocks.net/programming/database-schema-for-multipl-types-of-products/

nhập mô tả hình ảnh ở đây


Xin chào @Cao Phong, nơi nào sẽ xử lý số lượng sản phẩm? Các sản phẩm không sở hữu bất kỳ biến thể nào có thể sẽ xử lý nó trên bảng sản phẩm, nhưng còn các sản phẩm có biến thể thì sao?
codeninja

1
Xin chào, nếu thuộc tính như màu sắc, kích thước hoặc vật liệu hoặc bất kỳ sự kết hợp nào của chúng ảnh hưởng đến giá cả và như đã nói điều này sẽ làm gì nếu bạn không quan tâm đến chứng khoán qty
Bakly
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.