मुझे भी यही जरूरत है, और यहां बताया गया है कि मैंने आपके स्टॉक मूवमेंट के मुद्दे को कैसे निपटाया (जो मेरा मुद्दा भी बन गया)।
स्टॉक मूवमेंट (+/-) को मॉडल बनाने के लिए, मेरे पास मेरी 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
के साथ करता हूं , और मैं एक कंसोल कमांड
का उपयोग करता हूं , जो बैच में मेरे उत्पाद स्टॉक की गणना करेगा (मैं केवल एक निश्चित उत्पाद आईडी के लिए गणना करने के लिए एक वैकल्पिक पैरामीटर का उपयोग करता हूं), इसलिए मेरा स्टॉक हमेशा सही होता है (उपरोक्त क्वेरी के सापेक्ष), और मैं कभी भी स्टॉक तालिका को मैन्युअल रूप से अपडेट नहीं करता हूं।पी>