Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मॉडलिंग उत्पाद प्रकार

आपके पास ऐसा डिज़ाइन हो सकता है:

 +---------------+     +-------------------+
 | 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   |
 +---------------+

प्राथमिक, अद्वितीय और विदेशी कुंजियों के साथ:

  • उत्पाद
    • पीके:product_id
    • यूके:product_name
  • विकल्प
    • पीके:option_id
    • यूके:विकल्प_नाम
  • OPTION_VALUES
    • पीके:option_id, value_id
    • यूके:option_id, value_name
    • FK:option_id संदर्भ विकल्प (option_id)
  • PRODUCT_OPTIONS
    • पीके:product_id, option_id
    • FK:product_id संदर्भ उत्पाद (product_id)
    • FK:option_id संदर्भ विकल्प (option_id)
  • PRODUCT_VARIANTS
    • पीके:product_id,variant_id
    • यूके:sku_id
    • FK:product_id संदर्भ उत्पाद (product_id)
  • VARIANT_VALUES
    • PK:product_id,variant_id, option_id
    • FK:product_id,variant_id संदर्भ PRODUCT_VARIANTS (product_id,variant_id)
    • FK:product_id, option_id संदर्भ PRODUCT_OPTIONS (product_id, option_id)
    • FK:option_id, value_id संदर्भ OPTION_VALUES (option_id, value_Id)

आपके पास है:

  • उत्पाद उदा. शर्ट, जम्पर, पतलून
  • विकल्प उदा. आकार, रंग, लंबाई
  • OPTION_VALUES जैसे आकार - छोटा, मध्यम, बड़ा; रंग - लाल, सफेद, नीला
  • PRODUCT_OPTIONS उदा. शर्ट - आकार, रंग; पतलून - लंबाई, रंग

फिर आपको उत्पाद के विकल्पों की संख्या के बराबर आयामों की संख्या के साथ एक n-आयामी सरणी बनाने की आवश्यकता है। सरणी में प्रत्येक तत्व एक उत्पाद प्रकार से मेल खाता है। प्रत्येक उत्पाद के लिए हमेशा कम से कम एक उत्पाद प्रकार होगा; जैसा कि हमेशा "जैसा है" उत्पाद का छद्म विकल्प होता है

  • PRODUCT_VARIANTS जैसे शर्ट 1, शर्ट 2
  • VARIANT_VALUES जैसे शर्ट 1:छोटा लाल; शर्ट 2:छोटा सफ़ेद

जब तक किसी उत्पाद से जुड़े सभी विकल्पों के लिए मान निर्दिष्ट नहीं किए जाते हैं, तब तक आप यह सुनिश्चित करने के लिए सत्यापन करना चाहते हैं कि SKU असाइन नहीं किया गया है।

आप अपना डेटा कैसे देखते हैं, इसकी स्प्रैडशीट के आधार पर आप अपनी तालिकाओं में डेटा इस प्रकार दर्ज कर सकते हैं:

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)

ऐसा लगता है कि आपके डिज़ाइन में रिकॉर्ड की प्रविष्टि (product_variant_option_id:2; sku_id 1) को जोड़ने से रोकने से कुछ भी नहीं है, ताकि SKU W1SSCW के पास अब छोटे और बड़े दोनों विकल्प हों। रिकॉर्ड की प्रविष्टि को रोकने के लिए कुछ भी नहीं है (product_variant_option_id:7; sku_id:1) ताकि SKU W1SSCW में भी एमेच्योर का विकल्प हो।

आप अपना डेटा कैसे देखते हैं, इसकी स्प्रैडशीट के आधार पर आप मेरी तालिका में डेटा इस प्रकार दर्ज कर सकते हैं:

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)

मेरे डिज़ाइन में आप अतिरिक्त VARIANT_VALUES रिकॉर्ड दर्ज नहीं कर सके (product_id:1; वेरिएंट_id:1; option_id:1; value_id:2) - ताकि SKU W1SSCW में अब छोटे और बड़े दोनों विकल्प हों - VARIANT_VALUES पर प्राथमिक कुंजी के कारण और मौजूदा VARIANT_VALUES रिकॉर्ड (product_id:1;variant_id:1; option_id:1; value_id:1)। मेरे डिज़ाइन में आप VARIANT_VALUES रिकॉर्ड दर्ज नहीं कर सके (product_id:1;variant_id:1; option_id:4; value_id:1) - ताकि SKU W1SSCW के पास भी विकल्प हो (product_id:1; option_id:4) की इस तालिका में रिकॉर्ड करें जो दर्शाता है कि उत्पाद विजेट 1 के लिए क्लास एक मान्य विकल्प है।

संपादित करें :बिना PRODUCT_OPTIONS तालिका के डिज़ाइन करें

आपके पास ऐसा डिज़ाइन हो सकता है:

+---------------+     +---------------+
| 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   |
+---------------+

प्राथमिक, अद्वितीय और विदेशी कुंजियों के साथ:

  • उत्पाद
    • पीके:product_id
    • यूके:product_name
  • विकल्प
    • पीके:product_id, option_id
    • यूके:product_id, option_name
  • OPTION_VALUES
    • पीके:product_id, option_id, value_id
    • यूके:product_id, option_id, value_name
    • FK:उत्पाद-आईडी, विकल्प_आईडी संदर्भ विकल्प (उत्पाद_आईडी, विकल्प_आईडी)
  • PRODUCT_SKUS
    • पीके:product_id, sku_id
    • यूके:sku_id
    • FK:product_id संदर्भ उत्पाद (product_id)
  • SKU_VALUES
    • PK:product_id, sku_id, option_id
    • FK:product_id, sku_id संदर्भ PRODUCT_SKUS (product_id, sku_id)
    • FK:product_id, option_id संदर्भ विकल्प (product_id, option_id)
    • FK:product_id, option_id, value_id संदर्भ OPTION_VALUES (product_id, option_id, value_id)

आप अपना डेटा कैसे देखते हैं, इसकी स्प्रेडशीट के आधार पर आप इन तालिकाओं में डेटा इस प्रकार दर्ज कर सकते हैं:

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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP:चेतावनी:सॉर्ट () पैरामीटर 1 को सरणी, संसाधन दिए जाने की अपेक्षा करता है

  2. बूलियन मानों को संग्रहीत करने के लिए किस MySQL डेटा प्रकार का उपयोग करना है

  3. एक mysqli तैयार बयान में नल का उपयोग करना

  4. सप्ताह संख्या का उपयोग करके MySql में सप्ताह का पहला दिन प्राप्त करना

  5. SQL क्वेरी MySQL में तालिका को हटाने के लिए