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

स्टॉक प्रबंधन डेटाबेस डिजाइन

मुझे भी यही जरूरत है, और यहां बताया गया है कि मैंने आपके स्टॉक मूवमेंट के मुद्दे को कैसे निपटाया (जो मेरा मुद्दा भी बन गया)।

स्टॉक मूवमेंट (+/-) को मॉडल बनाने के लिए, मेरे पास मेरी supplying है और मेरा order टेबल। आपूर्ति मेरे +स्टॉक के रूप में कार्य करती है, और मेरे आदेश मेरे स्टॉक के रूप में।

यदि हम इस पर रुक जाते हैं, तो हम अपने वास्तविक स्टॉक की गणना कर सकते हैं जिसे इस SQL ​​​​क्वेरी में स्थानांतरित किया जाएगा:

SELECT
    id,
    name,
    sup.length - ord.length AS 'stock'
FROM
    product
# Computes the number of items arrived
INNER JOIN (
    SELECT
        productId,
        SUM(quantity) AS 'length'
    FROM
        supplying
    WHERE
        arrived IS TRUE
    GROUP BY
        productId
) AS sup ON sup.productId = product.id
# Computes the number of order
INNER JOIN (
    SELECT
        productId,
        SUM(quantity) AS 'length'
    FROM
        product_order
    GROUP BY
        productId
) AS ord ON ord.productId = product.id

जो कुछ इस तरह देगा:

id  name            stock
=========================
 1  ASUS Vivobook       3
 2  HP Spectre         10
 3  ASUS Zenbook        0
    ...

हालांकि यह आपको एक टेबल बचा सकता है, आप इसके साथ स्केल नहीं कर पाएंगे, इसलिए तथ्य यह है कि अधिकांश मॉडलाइजेशन (आईएमएचओ) एक मध्यवर्ती stock का उपयोग करते हैं। तालिका, अधिकतर प्रदर्शन संबंधी चिंताओं के लिए।

डेटा दोहराव में से एक नकारात्मक पक्ष है, क्योंकि आपको अपने स्टॉक को अपडेट करने के लिए उपरोक्त क्वेरी को फिर से चलाने की आवश्यकता होगी (देखें updatedAt कॉलम)।

अच्छा पक्ष क्लाइंट प्रदर्शन है। आप अपने एपीआई के माध्यम से तेजी से प्रतिक्रिया देंगे।

मुझे लगता है कि यदि आप उच्च ट्रैफिक स्टोर का प्रबंधन कर रहे हैं तो एक और नकारात्मक पहलू हो सकता है। आप एक अन्य तालिका बनाने की कल्पना कर सकते हैं जो इस तथ्य को संग्रहीत करती है कि एक स्टॉक की पुनर्गणना की जा रही है, और उपयोगकर्ता को पुनर्गणना समाप्त होने तक प्रतीक्षा करें (पुश अनुरोध या लंबे मतदान) यह जांचने के लिए कि क्या उसकी प्रत्येक वस्तु अभी भी उपलब्ध है (स्टॉक>=उपयोगकर्ता की मांग)। लेकिन यह एक और सौदा है...

वैसे भी, भले ही स्टॉक पुनर्गणना क्वेरी अनाम उपश्रेणियों का उपयोग कर रही हो, यह वास्तव में अधिकांश अपेक्षाकृत मध्यम स्टोरों में पर्याप्त तेज़ होनी चाहिए।

नोट

आप product_order . में देखते हैं , मैंने मूल्य और वैट को दोहराया। यह विश्वसनीयता कारणों से है:खरीद के समय कीमत को स्थिर करने के लिए, और बहुत सारे दशमलव के साथ कुल की गणना करने में सक्षम होने के लिए (बिना सेंट खोए)।

आशा है कि यह किसी को गुजरने में मदद करता है।

संपादित करें

व्यवहार में, मैं इसका उपयोग Laravel के साथ करता हूं , और मैं एक कंसोल कमांड का उपयोग करता हूं , जो बैच में मेरे उत्पाद स्टॉक की गणना करेगा (मैं केवल एक निश्चित उत्पाद आईडी के लिए गणना करने के लिए एक वैकल्पिक पैरामीटर का उपयोग करता हूं), इसलिए मेरा स्टॉक हमेशा सही होता है (उपरोक्त क्वेरी के सापेक्ष), और मैं कभी भी स्टॉक तालिका को मैन्युअल रूप से अपडेट नहीं करता हूं।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Google Analytics डेटा को mysql तालिकाओं में कैसे धकेलें

  2. XML_LOAD() का उपयोग करके XML फ़ाइल को MySQL डेटाबेस तालिका में कैसे आयात करें; समारोह

  3. mysql 5.7 . में माइग्रेशन के बाद क्वेरी बेहद धीमी

  4. वर्तमान पासवर्ड ज्ञात नहीं होने पर MySQL रूट पासवर्ड रीसेट करना

  5. MySQL में गुम मानों को खोजना/खोजना