डबल प्रविष्टि बहीखाता डेटाबेस डिजाइन


24

मैं एकाउंटिंग सॉफ्टवेयर बना रहा हूं। मुझे दोहरी प्रविष्टि बहीखाता लागू करने की आवश्यकता है। मुझे प्रति पंक्ति बनाम दो पंक्तियों में एक पंक्ति की शास्त्रीय समस्या है।

आइए एक उदाहरण लेते हैं और देखते हैं कि इसे दोनों परिदृश्यों में कैसे लागू किया जाएगा।

खाते Cashऔर खाते पर विचार करें Rent। जब मैं अपना मासिक किराया चुकाता हूं, मैं अपने Cashखाते से मेरे खाते में $ 100 स्थानांतरित करता हूं Rent

प्रति पंक्ति एक पंक्ति

एक पंक्ति प्रणाली में, इस तरह के लेनदेन के रूप में संग्रहीत किया जाएगा:

लेन-देन

 tx_id | posting_date
 1     | 23/05/2015

transaction_records

 id | tx_id | credit_account | debit_account | amount
 1  | 1     | Cash           | Rent          | 100.00

लेन-देन प्रति दो पंक्तियाँ

दो पंक्ति प्रणाली में, मुझे एक ही रिकॉर्ड बनाने के लिए एक ही लेन-देन रिकॉर्ड को मिरर करना होगा कि एक बार मैं दोनों को जोड़ दूं, मुझे शून्य शेष मिलेगा।

लेन-देन

 tx_id | posting_date
 1     | 23/05/2015

transaction_records

id  | tx_id | type   | account | amount
1   | 1     | credit | Cash    | 100.00
2   | 1     | debit  | Rent    | 100.00

समस्या

सबसे पहले मैं यह नोट करना चाहूंगा: मेरे पास कारण transactionsऔर transaction_recordsटेबल दोनों (एक टेबल के बजाय) विभाजित लेनदेन को संभालने में सक्षम होना है (ऐसा मामला जहां मैं $ 100 को Cashखाते से दो या अधिक अलग-अलग खातों में स्थानांतरित करता हूं )।

पहले तो मैंने इसे प्रति पंक्ति एक पंक्ति के साथ लागू करने की कोशिश की, लेकिन खाता संतुलन की गणना करने के लिए, और वास्तव में डेटा पुनर्प्राप्त करने के लिए इसका दर्द।

मैं दूसरे परिदृश्य की ओर झुक रहा हूं; हालाँकि, इसके कुछ मुद्दे भी हैं:

  • मैं एकल रिकॉर्ड कैसे अपडेट करूं? मान लिया कि मैंने गलती की है और अपने किराए के लिए $ 100 दर्ज करने के बजाय, मैंने $ 10 दर्ज किया है। मेरे पास अब 2 हैं transaction_records- एक क्रेडिट के लिए और एक डेबिट के लिए, दोनों $ 10 की राशि के साथ।
  • अब मैं अपना सामंजस्य बिठाता हूं और इस टाइपो को ठीक करना चाहता हूं। मैं इसे डेटाबेस में कैसे ठीक करूंगा? मुझे रिकॉर्ड्स के बीच कनेक्शन नहीं पता है, और विभाजन के मामले में, एक लेनदेन में 2 से अधिक रिकॉर्ड हो सकते हैं। एकमात्र समाधान जो मैं लेकर आया था ref_id, प्रत्येक रिकॉर्ड जोड़ी के लिए कुछ जोड़ना है जो विशिष्ट रूप से एक संदर्भ के अंदर "एक दूसरे के विपरीत पक्ष" होने के रूप में उन रिकॉर्डों की पहचान करेगा tx_id

कौन सा दृष्टिकोण बेहतर / सरल है?


मेरे प्रश्न को सरल बनाने के लिए: मैं खाता ए से खाता बी तक धन की आवाजाही का प्रतिनिधित्व करना चाहता हूं। मैंने जो दो परिदृश्य दिए हैं, वे इस लेनदेन को संग्रहीत करने के लिए दोनों वैध डिजाइन हैं। जैसा कि मैंने यह भी बताया कि इन दोनों के पास विपक्ष और पेशेवरों (पहले एक: बचाने के लिए आसान है, को पुनः प्राप्त करना कठिन है; दूसरा एक विपरीत)।

उनके पास अन्य पेशेवरों / विपक्ष हो सकते हैं कि मैं अभी हाजिर नहीं हूं, इसलिए मैं अधिक अनुभवी लोगों से एक राय पूछता हूं।


1
आपने अंत में किस विधि का उपयोग किया?
जोहान

@johan मैंने पहली विधि का विकल्प चुना जहां मेरे पास प्रति पंक्ति एक पंक्ति है। मैंने लेन-देन में शामिल प्रत्येक खाते के लिए संतुलन को सही ढंग से अपडेट करने के लिए ट्रिगर जोड़ा है (जब लेनदेन जोड़ा जाता है, अद्यतन या हटा दिया जाता है), तो यह इस पद्धति के साथ मेरे मुख्य मुद्दे को हल करता है।
दिमित्री कुद्रीवत्सेव

जवाबों:


5

वास्तव में, प्रस्तावित एकल पंक्ति लेखांकन स्कीमा "राशि" डेटा की अतिरेक को शुरू किए बिना उचित डबल एंट्री अकाउंटिंग (हमेशा डेबिट और क्रेडिट को निर्दिष्ट करने के लिए) निर्दिष्ट करने की अनुमति देता है।

एक पंक्ति स्कीमा आपको एक दोहरी प्रविष्टि का कार्यान्वयन देता है जो निर्माण द्वारा संतुलित करता है, ताकि यह "ढीला संतुलन" कभी भी असंभव हो। मशीन मक्खी पर उत्पादकों को फिर से जोड़ सकती है।

आपको एक बही को पुनः प्राप्त करने के लिए एक के बजाय 2 का चयन करना होगा।

ध्यान दें, लेन-देन विभाजन के अलावा, अन्य लेनदेन भी हैं जैसे विदेशी मुद्रा 4. के बजाय 2 रिकॉर्ड के साथ समाप्त हो सकता है। यह सब निर्भर करता है कि क्या आप समान रूप से वर्णन के साथ 4 लेनदेन दर्ज करें।

आप ऑडिट ट्रेल को बनाए रखने के लिए किसी भी लेन-देन के प्रवेश या संशोधन को रोक सकते हैं, यह आवश्यक है यदि आप लेन-देन लॉग को ऑडिट करने में सक्षम होना चाहते हैं।

ऐसा प्रतीत होता है कि सीपीए के लिए ऊपर दिए गए धागे में, "पूरी तरह से सामान्यीकृत" सभी एकाउंटेंट द्वारा मान्यता प्राप्त नियमों का मतलब प्रतीत होता है, जबकि प्रोग्रामर के लिए इसका एक अलग अर्थ है, कि कोई व्युत्पन्न या अनावश्यक डेटा संग्रहीत नहीं है।

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


1
मुझे सरल दृष्टिकोण पसंद है ... "अकाउंटिंग डेटा के लिए सभी लेन-देन का एक सेट है जो राशि और खाते देता है जिसमें से और जिसमें वे प्रवाह करते हैं, उनकी तारीख के साथ, कुछ विवरण" अच्छी तरह से डालते हैं। चलिए चीजों को अधूरा नहीं करते हैं।
चार्ल्स हर्मन

मुझे यह पसंद है कि आपने लेनदेन रिकॉर्ड को संशोधित करने की सलाह दी है। एक बार रिकॉर्ड बनाने के बाद इसे पत्थर में डाला जाता है। यही कारण है कि हमारे पास इस तरह की त्रुटियों को ठीक करने के लिए क्रेडिट और डेबिट नोट और अन्य उचित लेखांकन विधियां हैं
पीटर

17

एक जर्नल एक लेखा प्रणाली के लिए एक निर्दिष्ट प्रकार के सभी लेनदेन की कालानुक्रमिक सूची है। यहाँ एक साधारण बिक्री (खाता पर) जर्नल के खाता बही पर एक शास्त्रीय प्रस्तुति है :

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि हर लाइन कुल लेनदेन = कुल क्रेडिट के साथ एक एकल लेनदेन है; और यह कि हर लेन-देन समान तीन खाते हिट करता है। एक नकद बिक्री जर्नल समान लग रही है लेकिन स्तंभ की जगह लेंगे लेखा प्राप्य डेबिट एक लेबल के साथ नकद डेबिट । एक नकद संवितरण जर्नल लेबल एक प्रथम स्तंभ होता नकद साख और इस तरह के रूप में अतिरिक्त कॉलम लेखा देय डेबिट और कर्मचारी व्यय डेबिट

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

यह देखना आसान है कि इस पेपर मॉडल में महत्वपूर्ण नुकसान हैं जब सचमुच एक स्वचालित प्रणाली में स्थानांतरित किया जाता है:

  1. डेटा संरचना एक पिवोटेड है, जबकि अनुभव से पता चला है कि यह मुड़ा हुआ डेटा संरचना के खिलाफ प्रोग्राम करने के लिए बहुत सरल (अधिक मजबूत और अधिक आसानी से सत्यापित) है; तथा
  2. क्योंकि प्रत्येक विशेष जर्नल खातों के एक अलग सेट को हिट करता है, ऐसे प्रत्येक जर्नल को अलग से डिज़ाइन और प्रोग्राम करना होगा, एक बेकार और त्रुटि-प्रधान गतिविधि।

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

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


मेरा कहना यह है कि आप दोनों के प्रस्ताव दोहरे प्रविष्टि बहीखाता पद्धति के लिए निराधार तंत्र हैं । पहला बिंदु: बहुत अच्छे कारणों से पत्रिकाएँ एक बार लिखी जाती हैं । कभी-कभी दो वर्चुअल टेबल लंबित प्रविष्टियाँ और पोस्ट की गई प्रविष्टियाँ एक ही डेटा संरचना में ढह जाती हैं , लेकिन IsPosted बिट हमेशा केवल-लेखन होती है और सिस्टम को यह सुनिश्चित करना चाहिए कि पोस्ट एंट्री रिकॉर्ड्स की केवल-पढ़ने की प्रकृति को बनाए रखा जाए।

पिछले 800 वर्षों से जिस तरह से अकाउंटेंट ने जर्नल एंट्रीज़ पोस्ट की हैं, वह पूरी तरह से सामान्यीकृत है । एक पेपर प्रस्तुति और एक ध्वनि इलेक्ट्रॉनिक प्रस्तुति के बीच एकमात्र अंतर यह है कि एक मुड़ा हुआ टेबल संरचना बाद के मामले में अधिक सुविधाजनक है, जबकि पूर्व में एक पिवोट टेबल संरचना, जो ऐतिहासिक रूप से सबसे महत्वपूर्ण थी जब अत्यधिक समानांतर प्रसंस्करण वांछित था - अर्थात कई क्लर्क प्रत्येक विशेष पत्रिकाओं के एक या छोटी संख्या को बनाए रखना। केवल नियंत्रक ऐतिहासिक रूप से जनरल जर्नल के लिए अनुमति थी।

ध्यान दें कि ऊपर में मैंने निर्दिष्ट किया था कि जर्नल प्रविष्टियां पूरी तरह से सामान्यीकृत हैं; जर्नल प्रविष्टियाँ सभी लेनदेन का एक कालानुक्रमिक रिकॉर्ड हैं, जो प्रत्येक लेनदेन प्रकार के लिए विशिष्ट पत्रिकाओं में समूहीकृत हैं। लेजर के लिए जर्नल प्रविष्टियों की पोस्टिंग एक अलग प्रयास है और पूरी तरह से सामान्य होने पर, जर्नल प्रविष्टियों की एक निरर्थक प्रतिलिपि है, जहां सभी लेनदेन संक्षेप में (सामान्य लेजर) या विस्तृत (उप लेजर) खाते द्वारा किए जाते हैं। जर्नल्स और लेजर दोनों स्वतंत्र रूप से डबल-एंट्री बहीखाता पद्धति को रोजगार देते हैं।

@Codism कोई भी लेखा प्रणाली, DEB या SEB, आपको रिकॉर्ड किए गए सभी खातों के लिए सामान्यीकृत रिपोर्टिंग देती है । ध्यान दें कि, आंतरिक रूप से, एक उप-बहीखाता एकल-प्रविष्टि बहीखाता रिकॉर्ड परिभाषा द्वारा है; दूसरी ओर बैलेंस शीट पर संबंधित नियंत्रण खाता है । डीईबी यह सुनिश्चित करता है कि प्रत्येक परिसंपत्ति डॉलर के लिए परिसंपत्ति पर व्यापार के दावे का सटीक रिकॉर्ड हो , अर्थात परिसंपत्ति में इक्विटी चाहे वह ऋण इक्विटी (उर्फ देयता) हो या एक स्वामित्व की इक्विटी हो , और उन दावों की प्राथमिकता यदि हो तो संगठन दिवालिया हो जाता है।


5

क्या मैं आपको सुझाव दूंगा कि आप इस क्षेत्र में खुले स्रोत सॉफ़्टवेयर के ख़ज़ाने पर नज़र डालें?

" ओपन सोर्स डबल एंट्री अकाउंटिंग सॉफ्टवेयर " का एक Google जांच के कई आशाजनक संकेत देता है।

आप यहां जीएनयू लेखा पैकेज देख सकते हैं , समीक्षा साइटों ( 1 और 2 ) के एक जोड़े और अंत में मुफ्त सॉफ्टवेयर पर एक खंड के साथ लेखांकन सॉफ्टवेयर की विकी

मुझे यकीन है कि कुछ F / LOSS स्रोत कोड और स्कीमा की जांच करने से, आपको कुछ अच्छे संकेत और संकेत मिल सकते हैं कि स्कीमा और / या सॉफ़्टवेयर कैसे लिखें जो आपकी स्वयं की विशेष आवश्यकताओं के अनुरूप हों।


1

मेरे पास एक ऐसी प्रणाली है जो सिंगल लाइन खाते होने की तुलना में दोहरी लाइनों और इसकी बहुत सारी चुनौतियों का सामना करती है। पहले मुझे केवल एक ही लाइन के उदाहरणों का सामना करना पड़ा, जिन्हें डेबिट पक्ष की तरह धकेला गया, जिसके परिणामस्वरूप असंतुलित खाता है। यहां तक ​​कि अगर कमिटिंग और रोलबैक का उचित नियंत्रण नहीं कर रहे हैं, तो भी यह एकल पंक्ति खातों में नहीं होगा। अंत में, आपका db डबल विकास दर में बढ़ता है, आपकी दूसरी पंक्ति में बहुत सारी डुप्लिकेट जानकारी होगी, एकमात्र अंतर दूसरा खाता होगा। सिंगल लाइन खाते को बनाए रखने की सलाह देंगे, मैं उस रूट पर जा रहा हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.