Birden fazla varyant / özelliğe sahip ürünler için şema tasarımı?


11

MySQL kullanıyorum. Fikir, farklı bir konseptle shopify'a benzer, bu nedenle kullanıcılar birden fazla varyant ve özellik türüyle kendi ürünlerini ekleyeceklerdir.

Yaptığım tüm araştırmalardan bu benim için en olası çözüm gibi görünüyor ve sadece aşağıdaki şemada bir sorun olup olmadığını ve yukarı / aşağı tarafların ne olduğunu merak ediyorum?

teşekkür ederim

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
'Eav' etiketine tıklayın.
Rick James

Tam bir EAV çözümü ile ilgilenmiyorum. Tasarladığım şemada bazı EAV kavramı kullanılıyor, ancak tam olarak değil.
lesandru

Yanıtlar:


5

Bu sadece @lesandru yanıtından gelen bilgi, gerçekten çok yararlı buluyorum, bu yüzden ona ve @sahalMoidu'ya kredi

Probleminize normalizasyon uygulanarak çözüm verildiği gibidir. Koş ve Fiddle'da gör

Vaktini boşa harcamak

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

Birden Çok Ürün Türü için Veritabanı Şeması

Çözüm burada: http://www.codingblocks.net/programming/database-schema-for-multiple-types-of-products/

resim açıklamasını buraya girin


Merhaba @Cao Phong, biri ürün miktarını nerede ele alır? Varyantları olmayan ürünler muhtemelen ürün tablosunda işleyebilirler, ancak varyantları olan ürünler ne durumda?
codeninja

1
Merhaba renk, boyut veya malzeme veya bunların herhangi bir kombinasyonu gibi özellik fiyatı etkiliyorsa ve stok
miktarı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.