Anda bisa memiliki desain seperti:
+---------------+ +-------------------+
| PRODUCTS |-----< PRODUCT_VARIANTS |
+---------------+ +-------------------+
| #product_id | | #product_id |
| product_name | | #variant_id |
+---------------+ | sku_id |
| +-------------------+
| |
+--------^--------+ +--------^--------+
| PRODUCT_OPTIONS |-----< VARIANT_VALUES |
+-----------------+ +-----------------+
| #product_id | | #product_id |
| #option_id | | #variant_id |
+--------v--------+ | #option_id |
| | value_id |
+-----------------+ +--------v--------+
| OPTIONS | |
+-----------------+ |
| #option_id | |
| option_name | |
+-----------------+ |
| |
+-------^-------+ |
| OPTION_VALUES |---------------+
+---------------+
| #option_id |
| #value_id |
| value_name |
+---------------+
Dengan Kunci Utama, Unik, dan Asing:
- PRODUK
- PK:product_id
- Inggris Raya:product_name
- OPSI
- PK:option_id
- Inggris Raya:option_name
- OPTION_VALUES
- PK:option_id, value_id
- Inggris Raya:option_id, value_name
- FK:option_id REFERENSI OPSI (option_id)
- PRODUCT_OPTIONS
- PK:product_id, option_id
- FK:product_id REFERENSI PRODUK (product_id)
- FK:option_id REFERENSI OPSI (option_id)
- PRODUCT_VARIANTS
- PK:product_id, varian_id
- Inggris Raya:sku_id
- FK:product_id REFERENSI PRODUK (product_id)
- VARIANT_VALUES
- PK:product_id, varian_id, option_id
- FK:product_id, varian_id REFERENCES PRODUCT_VARIANTS (product_id, variant_id)
- FK:product_id, option_id REFERENCES PRODUCT_OPTIONS (product_id, option_id)
- FK:option_id, value_id REFERENCES OPTION_VALUES (option_id, value_Id)
Anda memiliki:
- PRODUK mis. Kemeja, Jumper, Celana
- OPSI mis. Ukuran, Warna, Panjang
- OPTION_VALUES mis. Ukuran - Kecil, Sedang, Besar; Warna - Merah, Putih, Biru
- PRODUCT_OPTIONS mis. Kemeja - Ukuran, Warna; Celana - Panjang, Warna
Anda kemudian perlu membuat larik n-dimensi, dengan jumlah dimensi yang sama dengan jumlah opsi untuk produk. Setiap elemen dalam larik sesuai dengan varian produk. Akan selalu ada setidaknya satu varian produk untuk setiap produk; karena selalu ada opsi semu dari produk "apa adanya"
- PRODUCT_VARIANTS misalnya Baju 1, Baju 2
- VARIANT_VALUES mis. Kemeja 1:Merah Kecil; Baju 2:Putih Kecil
Anda mungkin ingin memiliki validasi untuk memastikan SKU tidak ditetapkan kecuali nilai telah ditentukan untuk semua opsi yang terkait dengan produk.
Berdasarkan spreadsheet tentang bagaimana Anda melihat data Anda, Anda dapat memasukkan data ke dalam tabel Anda sebagai berikut:
PRODUCTS
========
id name
--- --------
1 Widget 1
2 Widget 2
3 Widget 3
PRODUCT_VARIANTS
================
id product_id name
--- ---------- ------
1 1 Size (Widget 1)
2 1 Color (Widget 1)
3 2 Size (Widget 2)
4 3 Class (Widget 3)
5 3 Size (Widget 3)
PRODUCT_VARIANT_OPTIONS
=======================
id product_variant_id name
--- ------------------ -------------
1 1 Small (Widget 1; Size)
2 1 Large (Widget 1; Size)
3 2 White (Widget 1; Color)
4 2 Black (Widget 1; Color)
5 3 Small (Widget 2; Size)
6 3 Medium (Widget 2; Size)
7 4 Amateur (Widget 3; Class)
8 4 Professional (Widget 3; Class)
9 5 Medium (Widget 3; Size)
10 5 Large (Widget 3; Size)
SKUS
====
id product_id sku price
--- ---------- ------ -----
1 1 W1SSCW 10 (Widget 1)
2 1 W1SSCB 10 (Widget 1)
3 1 W1SLCW 12 (Widget 1)
4 1 W1SLCB 15 (Widget 1)
5 2 W2SS 100 (Widget 2)
6 2 W2SM 100 (Widget 2)
7 3 W3CASM 50 (Widget 3)
8 3 W3CASL 50 (Widget 3)
9 3 W3CPSM 150 (Widget 3)
10 3 W3CPSL 160 (Widget 3)
PRODUCT_VARIANT_OPTION_COMBINATIONS
===================================
product_variant_option_id sku_id
------------------------- ------
1 1 (W1SSCW; Size; Small)
3 1 (W1SSCW; Color; White)
1 2 (W1SSCB; Size; Small)
4 2 (W1SSCB; Color; Black)
2 3 (W1SLCW; Size; Large)
3 3 (W1SLCW; Color; White)
2 4 (W1SLCB; Size; Large)
4 4 (W1SLCB; Color; Black)
5 5 (W2SS; Size; Small)
6 6 (W2SM; Size; Medium)
7 7 (W3CASM; Class; Amateur)
9 7 (W3CASM; Size; Medium)
7 8 (W3CASL; Class; Amateur)
10 8 (W3CASL; Size; Large)
8 9 (W3CPSM; Class; Professional)
9 9 (W3CPSM; Size; Medium)
8 10 (W3CPSL; Class; Professional)
10 10 (W3CPSL; Size; Large)
Sepertinya tidak ada dalam desain Anda yang menghentikan penambahan entri catatan (product_variant_option_id:2; sku_id 1) sehingga SKU W1SSCW sekarang memiliki opsi Kecil dan Besar. Tidak ada yang menghentikan masuknya record (product_variant_option_id:7; sku_id:1) sehingga SKU W1SSCW juga memiliki opsi Amateur.
Berdasarkan spreadsheet bagaimana Anda melihat data Anda, Anda dapat memasukkan data di tabel saya sebagai berikut:
PRODUCTS
========
product_id product_name
---------- ------------
1 Widget 1
2 Widget 2
3 Widget 3
OPTIONS
=======
option_id option_name
--------- -----------
1 Size SL
2 Color
3 Size SM
4 Class
5 Size ML
OPTION_VALUES
=============
option_id value_id value_name
--------- -------- ------------
1 1 Small (Size SL)
1 2 Large (Size SL)
2 1 White (Color)
2 2 Black (Color)
3 1 Small (Size SM)
3 2 Medium (Size SM)
4 1 Amateur (Class)
4 2 Professional (Class)
5 1 Medium (Size ML)
5 2 Large (Size ML)
PRODUCT_OPTIONS
===============
product_id option_id
---------- ---------
1 1 (Widget 1; Size SL)
1 2 (Widget 1; Color)
2 3 (Widget 2; Size SM)
3 4 (Widget 3; Class)
3 5 (Widget 4; Size ML)
PRODUCT_VARIANTS
================
product_id variant_id sku_id
---------- ---------- ------
1 1 W1SSCW (Widget 1)
1 2 W1SSCB (Widget 1)
1 3 W1SLCW (Widget 1)
1 4 W1SLCB (Widget 1)
2 1 W2SS (Widget 2)
2 2 W2SM (Widget 2)
3 1 W3CASM (Widget 3)
3 2 W3CASL (Widget 3)
3 3 W3CPSM (Widget 3)
3 4 W3CPSL (Widget 3)
VARIANT_VALUES
==============
product_id variant_id option_id value_id
---------- ---------- --------- --------
1 1 1 1 (W1SSCW; Size SL; Small)
1 1 2 1 (W1SSCW; Color; White)
1 2 1 1 (W1SSCB; Size SL; Small)
1 2 2 2 (W1SSCB; Color; Black)
1 3 1 2 (W1SLCW; Size SL; Large)
1 3 2 1 (W1SLCW; Color; White)
1 4 1 2 (W1SLCB; Size SL; Large)
1 4 2 2 (W1SLCB; Color; Black)
2 1 3 1 (W2SS; Size SM; Small)
2 2 3 2 (W2SM; Size SM; Medium)
3 1 4 1 (W3CASM; Class; Amateur)
3 1 5 1 (W3CASM; Size ML; Medium)
3 2 4 1 (W3CASL; Class; Amateur)
3 2 5 2 (W3CASL; Size ML; Large)
3 3 4 2 (W3CPSM; Class; Professional)
3 3 5 1 (W3CPSM; Size ML; Medium)
3 4 4 2 (W3CPSL; Class; Professional)
3 4 5 2 (W3CPSL; Size ML; Large)
Dalam desain saya, Anda tidak dapat memasukkan catatan VARIANT_VALUES tambahan (id_produk:1; varian_id:1; id_opsi:1; id_nilai:2) - sehingga SKU W1SSCW sekarang memiliki opsi Kecil dan Besar - karena kunci utama pada VARIANT_VALUES dan data VARIANT_VALUES yang ada (id_produk:1; id_varian:1; id_opsi:1; id_nilai:1). Dalam desain saya, Anda tidak dapat memasukkan catatan VARIANT_VALUES (id_produk:1; varian_id:1; id_opsi:4; id_nilai:1) - sehingga SKU W1SSCW juga memiliki opsi Amatir - karena kunci asing merujuk PRODUCT_OPTIONS dan kurangnya record dalam tabel ini (product_id:1; option_id:4) yang menunjukkan bahwa Kelas adalah opsi yang valid untuk produk Widget 1.
EDIT :Desain tanpa tabel PRODUCT_OPTIONS
Anda bisa memiliki desain seperti:
+---------------+ +---------------+
| PRODUCTS |-----< PRODUCT_SKUS |
+---------------+ +---------------+
| #product_id | | #product_id |
| product_name | | #sku_id |
+---------------+ | sku |
| | price |
| +---------------+
| |
+-------^-------+ +------^------+
| OPTIONS |------< SKU_VALUES |
+---------------+ +-------------+
| #product_id | | #product_id |
| #option_id | | #sku_id |
| option_name | | #option_id |
+---------------+ | value_id |
| +------v------+
+-------^-------+ |
| OPTION_VALUES |-------------+
+---------------+
| #product_id |
| #option_id |
| #value_id |
| value_name |
+---------------+
Dengan Kunci Utama, Unik, dan Asing:
- PRODUK
- PK:product_id
- Inggris Raya:product_name
- OPSI
- PK:product_id, option_id
- Inggris Raya:product_id, option_name
- OPTION_VALUES
- PK:product_id, option_id, value_id
- Inggris Raya:product_id, option_id, value_name
- FK:product-id, option_id REFERENSI OPSI (product_id, option_id)
- PRODUCT_SKUS
- PK:product_id, sku_id
- Inggris Raya:sku_id
- FK:product_id REFERENSI PRODUK (product_id)
- SKU_VALUES
- PK:product_id, sku_id, option_id
- FK:product_id, sku_id REFERENSI PRODUCT_SKUS (product_id, sku_id)
- FK:product_id, option_id REFERENSI OPSI (product_id, option_id)
- FK:product_id, option_id, value_id REFERENCES OPTION_VALUES (product_id, option_id, value_id)
Berdasarkan spreadsheet tentang bagaimana Anda melihat data Anda, Anda dapat memasukkan data dalam tabel ini sebagai berikut:
PRODUCTS
========
product_id product_name
---------- ------------
1 Widget 1
2 Widget 2
3 Widget 3
OPTIONS
=======
product_id option_id option_name
---------- --------- -----------
1 1 Size (Widget 1)
1 2 Color (Widget 1)
2 1 Size (Widget 2)
3 1 Class (Widget 3)
3 2 Size (Widget 3)
OPTION_VALUES
=============
product_id option_id value_id value_name
---------- --------- -------- ------------
1 1 1 Small (Widget1; Size)
1 1 2 Large (Widget1; Size)
1 2 1 White (Widget1; Color)
1 2 2 Black (Widget1; Color)
2 1 1 Small (Widget2; Size)
2 1 2 Medium (Widget2; Size)
3 1 1 Amateur (Widget3; Class)
3 1 2 Professional (Widget3; Class)
3 2 1 Medium (Widget3; Size)
3 2 2 Large (Widget3; Size)
PRODUCT_SKUS
============
product_id sku_id sku
---------- ------ ------
1 1 W1SSCW (Widget 1)
1 2 W1SSCB (Widget 1)
1 3 W1SLCW (Widget 1)
1 4 W1SLCB (Widget 1)
2 1 W2SS (Widget 2)
2 2 W2SM (Widget 2)
3 1 W3CASM (Widget 3)
3 2 W3CASL (Widget 3)
3 3 W3CPSM (Widget 3)
3 4 W3CPSL (Widget 3)
SKU_VALUES
==========
product_id sku_id option_id value_id
---------- ------ --------- --------
1 1 1 1 (W1SSCW; Size; Small)
1 1 2 1 (W1SSCW; Color; White)
1 2 1 1 (W1SSCB; Size; Small)
1 2 2 2 (W1SSCB; Color; Black)
1 3 1 2 (W1SLCW; Size; Large)
1 3 2 1 (W1SLCW; Color; White)
1 4 1 2 (W1SLCB; Size; Large)
1 4 2 2 (W1SLCB; Color; Black)
2 1 1 1 (W2SS; Size; Small)
2 2 1 2 (W2SM; Size; Medium)
3 1 1 1 (W3CASM; Class; Amateur)
3 1 2 1 (W3CASM; Size; Medium)
3 2 1 1 (W3CASL; Class; Amateur)
3 2 2 2 (W3CASL; Size; Large)
3 3 1 2 (W3CPSM; Class; Professional)
3 3 2 1 (W3CPSM; Size; Medium)
3 4 1 2 (W3CPSL; Class; Professional)
3 4 2 2 (W3CPSL; Size; Large)