Desain skema untuk produk dengan beragam varian / atribut?

11

Saya menggunakan MySQL. Idenya mirip dengan shopify dengan konsep yang berbeda, sehingga pengguna akan menambahkan produk mereka sendiri dengan berbagai jenis varian dan atribut.

Dari semua penelitian yang telah saya lakukan ini sepertinya solusi yang paling mungkin bagi saya dan saya hanya ingin tahu apakah ada yang salah dengan skema berikut dan apa kelebihan / kekurangannya?

Terima kasih

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        |
lesandru
sumber
1
Klik pada tag 'eav'.
Rick James
Saya tidak tertarik dengan solusi EAV lengkap. Skema yang saya rancang menggunakan beberapa konsep EAV tetapi tidak sepenuhnya.
lesandru

Jawaban:

5

Ini hanya info dari balasan @lesandru, saya benar-benar merasa sangat berguna, jadi kredit untuknya dan @sahalMoidu

Menerapkan normalisasi untuk masalah Anda solusinya seperti yang diberikan. Jalankan dan lihat di Fiddle

Biola

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);
Bakly
sumber
2

Skema Basis Data untuk Berbagai Jenis Produk

Solusi ada di sini: http://www.codingblocks.net/programming/database-schema-for-multiple-types-of-products/

masukkan deskripsi gambar di sini

Cao Phong
sumber
Halo @Cao Phong, di mana orang akan menangani jumlah produk? Produk yang tidak memiliki varian mungkin akan menanganinya di tabel produk, tetapi bagaimana dengan produk yang memiliki varian?
codeninja
1
Halo bagaimana jika atribut seperti warna, ukuran, atau bahan atau kombinasi dari mereka mempengaruhi harga dan suka mengatakan ini akan dilakukan jika Anda tidak peduli dengan jumlah stok
Bakly