ডাবল এন্ট্রি বুককিপিং ডাটাবেস ডিজাইন


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টেবিলের কারণ (এক টেবিলের পরিবর্তে) বিভক্ত লেনদেন পরিচালনা করতে সক্ষম হবেন (এমন একটি ক্ষেত্রে যেখানে আমি Cashঅ্যাকাউন্ট থেকে দুটি বা আরও বেশি অ্যাকাউন্টে $ 100 স্থানান্তর করি )।

প্রথমে আমি প্রতি লেনদেনের জন্য এক সারি দিয়ে এটি বাস্তবায়নের চেষ্টা করেছি, তবে অ্যাকাউন্টের ভারসাম্যটি গণনা করতে এবং তথ্যটি পুনরুদ্ধার করার জন্য এটি একটি ব্যথা।

আমি দ্বিতীয় দৃশ্যের দিকে ঝুঁকছি; তবে এর কিছু সমস্যা রয়েছে:

  • আমি কীভাবে একটি একক রেকর্ড আপডেট করব? ধরে নিলাম আমি একটি ভুল করেছি এবং আমার ভাড়াটির জন্য $ 100 রেকর্ড করার পরিবর্তে, আমি $ 10 রেকর্ড করেছি। আমার কাছে এখন 2 transaction_records- 10 টির জন্য ক্রেডিট এবং একটি ডেবিট হিসাবে রয়েছে।
  • এখন আমি আমার পুনর্মিলন করি এবং আমি এই টাইপ ঠিক করতে চাই। আমি কীভাবে এটি ডাটাবেসে ঠিক করব? আমি রেকর্ডগুলির মধ্যে সংযোগটি জানি না এবং বিভাজনের ক্ষেত্রে একটি লেনদেনে ২ টিরও বেশি রেকর্ড থাকতে পারে। আমি যে সমাধানটি নিয়ে এসেছি তা হ'ল ref_idপ্রতিটি রেকর্ড জুটির জন্য কিছু যুক্ত করা যা সেই নির্দিষ্ট রেকর্ডটির নির্দিষ্টতার প্রসঙ্গে "রেকর্ডগুলি একে অপরের বিপরীত দিক" হিসাবে স্বতন্ত্রভাবে চিহ্নিত করবে tx_id

কোন পদ্ধতির ভাল / সহজ?


আমার প্রশ্নটি সহজ করার জন্য: আমি এ থেকে বি অ্যাকাউন্টে অ্যাকাউন্টে অর্থের চলন উপস্থাপন করতে চাই। দুটি পরিস্থিতিতে আমি এই জাতীয় লেনদেন সঞ্চয় করার জন্য উভয়ই বৈধ নকশা। আমি যেমনটি উল্লেখ করেছি যে তাদের উভয়ের পক্ষে মতামত রয়েছে (প্রথমটি: সংরক্ষণ করা সহজ, পুনরুদ্ধার করা শক্ত; দ্বিতীয়টি বিপরীত)।

তাদের অন্যান্য মতামত / বিধি থাকতে পারে যা আমি এই মুহুর্তে স্পষ্ট করি না, তাই আমি আরও অভিজ্ঞ ব্যক্তিদের কাছ থেকে মতামত চাই।


1
শেষ পর্যন্ত আপনি কোন পদ্ধতিটি ব্যবহার করেছেন?
জোহান

@ জোহান আমি প্রথম পদ্ধতিটি বেছে নিয়েছি যেখানে আমার লেনদেনের জন্য এক সারি রয়েছে। আমি লেনদেনের সাথে জড়িত প্রতিটি অ্যাকাউন্টের জন্য সঠিকভাবে ভারসাম্য আপডেট করতে ট্রিগার যুক্ত করেছি (যখন লেনদেন যুক্ত করা হয়, আপডেট করা হয় বা মুছে ফেলা হয়), সুতরাং এটি এই পদ্ধতির সাহায্যে আমার মূল সমস্যাটি সমাধান করে।
দিমিত্রি কুদ্রিভতসেভ

উত্তর:


5

প্রকৃতপক্ষে, প্রস্তাবিত একক সারির অ্যাকাউন্টিং স্কিমা "পরিমাণ" ডেটার অপ্রয়োজনীয়তার পরিচয় না দিয়ে সঠিক ডাবল এন্ট্রি অ্যাকাউন্টিং (সর্বদা অ্যাকাউন্টটি ডেবিটেড এবং জমা দেওয়া নির্দিষ্ট করতে) করতে দেয়।

এক সারি স্কিমা আপনাকে দ্বিগুণ প্রবেশের একটি বাস্তবায়ন দেয় যা নির্মাণের মাধ্যমে ভারসাম্য বজায় রাখে, যাতে কখনও "looseিলে balanceালা ভারসাম্য" পাওয়া অসম্ভব। মেশিনটি উড়ে যাওয়ার সময় লেজারগুলিকে সংশোধন করতে পারে।

একটি খাতাটি পুনরুদ্ধার করতে আপনার পরিবর্তে 2 টি নির্বাচন করতে হবে।

দ্রষ্টব্য, লেনদেনের বিভাজন ছাড়াও অন্যান্য লেনদেন যেমন বিদেশী এক্সচেঞ্জ 4 এর পরিবর্তে 2 টি রেকর্ডের সাথে শেষ হতে পারে তবে এগুলি সমস্ত কিছু নির্ভর করে যে আপনি যদি সামান্য বর্ণনামূলকভাবে 4 টি লেনদেন সন্নিবেশ করেন তবে কিছু নির্ভর করে।

আপনি অডিট ট্রেল বজায় রাখতে কোনও লেনদেনের প্রবেশ বা পরিবর্তন রোধ করতে পারেন, আপনি যদি লেনদেন লগটি নিরীক্ষণ করতে সক্ষম হতে চান তবে এটি প্রয়োজন this

এটি প্রদর্শিত হয় যে সিপিএর জন্য উপরের থ্রেডে, "সম্পূর্ণরূপে নরমালাইজড" এর অর্থ সমস্ত অ্যাকাউন্টেন্ট দ্বারা স্বীকৃত নিয়ম বোঝানো হয়েছে, যদিও প্রোগ্রামারটির পক্ষে এটির একটি বিচ্ছিন্ন অর্থ রয়েছে, কোনও উত্পন্ন বা অপ্রয়োজনীয় ডেটা সংরক্ষণ করা হয়নি।

অ্যাকাউন্টিং ডেটা যা আছে তা হ'ল লেনদেনের একটি সেট যা তাদের তারিখ, কিছু বিবরণ (এবং অন্যান্য সংযুক্তি) সহ পরিমাণে এবং যে অ্যাকাউন্ট থেকে তারা প্রবাহিত হয় সেগুলি দেয়। লেজার এবং ব্যালেন্সগুলি অঙ্কগুলি করে এই লেনদেনের ডেটা থেকে প্রাপ্ত সাধারণ দর্শন।


1
আমি সহজ পদ্ধতির পছন্দ করি ... "অ্যাকাউন্টিং ডেটাতে যা কিছু আছে তা হ'ল লেনদেনের একটি সেট যা তাদের তারিখের সাথে কিছু পরিমাণ বিবরণ দেয় এবং যেগুলি থেকে তারা প্রবাহিত হয়, কিছু বিবরণ" ভাল রাখে। আসুন জিনিসগুলিকে অতিরিক্ত জটিল করে তুলুন না।
চার্লস হরমোন

আমি পছন্দ করি যে আপনি লেনদেনের রেকর্ড সংশোধন করার বিরুদ্ধে পরামর্শ দিয়েছেন। একবার কোনও রেকর্ড তৈরি হয়ে গেলে এটি পাথরে ফেলে দেওয়া হয়। এই কারণেই এই জাতীয় ত্রুটিগুলি ঠিক করার জন্য আমাদের কাছে ক্রেডিট এবং ডেবিট নোট এবং অন্যান্য সঠিক অ্যাকাউন্টিং পদ্ধতি রয়েছে
পিটার

17

একটি জার্নাল অ্যাকাউন্টিং সিস্টেমের জন্য নির্দিষ্ট ধরণের সমস্ত লেনদেনের কালানুক্রমিক তালিকা। এখানে একটি সাধারণ বিক্রয় (অ্যাকাউন্টে) জার্নালের লেজার পেপারে একটি ধ্রুপদী উপস্থাপনা :

এখানে চিত্র বর্ণনা লিখুন

নোট করুন যে প্রতিটি লাইন মোট একক = সম্পূর্ণ ক্রেডিট সহ একক লেনদেন; এবং প্রতিটি লেনদেন একই তিনটি অ্যাকাউন্টকে হিট করে। একটি নগদ বিক্রয় জার্নাল অনুরূপ দেখাবে কিন্তু কলাম অ্যাকাউন্টগুলি প্রাপ্তিযোগ্য ডেবিটকে একটি লেবেলযুক্ত নগদ ডেবিট দিয়ে প্রতিস্থাপন করবে । একজন নগদ বিতরণ জার্নাল লেবেল যুক্ত একটি প্রথম কলামে থাকবে ক্যাশ ক্রেডিট এবং যেমন অতিরিক্ত কলাম পরিশোধযোগ্য হিসাব ডেবিট এবং কর্মচারী খরচ ডেবিট

কয়েক দশক আগে ব্যক্তিগত কম্পিউটার সাশ্রয়ী না হওয়া অবধি এই উপস্থাপনাটি কয়েকশ বছর ধরে প্রমিত ছিল। সহজেই যাচাইয়ের একটি উল্লেখযোগ্য সুবিধা রয়েছে যে প্রতিটি লেনদেন কেবল প্রতিটি সারি পরীক্ষা করেই ভারসাম্যপূর্ণ। তেমনি, লেজারদের কাছে এই জাতীয় লেনদেনের একটি পৃষ্ঠা পোস্ট করার আগে পৃষ্ঠাগুলির সমষ্টিও একইভাবে যাচাই করা যেতে পারে। এটি অনেকগুলি অ্যাকাউন্টিং সিস্টেমে ব্যাচ-প্রসেসিং মডেল ব্যবহৃত হয়।

আক্ষরিকভাবে একটি স্বয়ংক্রিয় সিস্টেমে প্রতিলিপি করা হলে এই কাগজ মডেলটির উল্লেখযোগ্য অসুবিধা রয়েছে তা দেখতে সহজ:

  1. ডেটা স্ট্রাকচারটি হ'ল একটি পাইভোড, যেখানে অভিজ্ঞতা থেকে প্রমাণিত হয়েছে যে কোনও ভাঁজ করা ডেটা কাঠামোর বিরুদ্ধে প্রোগ্রাম করা অনেক সহজ (আরও বেশি শক্তিশালী এবং আরও সহজে যাচাই করা হয়েছে); এবং
  2. যেহেতু প্রতিটি বিশেষ জার্নাল অ্যাকাউন্টগুলির একটি পৃথক সেটকে হিট করে , এই জাতীয় প্রতিটি জার্নালকে আলাদাভাবে ডিজাইন এবং প্রোগ্রামিং করতে হবে, একটি অপচয় এবং ত্রুটি-প্রবণ কার্যকলাপ।

এই কারণে সাধারণত অ্যাকাউন্টিং সিস্টেমের ইন্টারফেস হিসাবে বিশেষী জার্নালস ডিজাইন ব্যবহার করার পরামর্শ দেওয়া হয় তবে এমন একটি ডেটা স্ট্রাকচার ডিজাইন করার জন্য যা একাধিক জার্নালের সংখ্যাসূচক সংগ্রহস্থল হতে পারে। একটি আধুনিক RDBMS এই সম্ভাব্য সুবিধা হলো হয়েছে জেনারেল লেজার , এবং এমনকি বিশেষ subledgers , হতে পারে সূচিবদ্ধ দেখেছে জার্নাল উপর, সম্পূর্ণ কোডে প্রয়োজন একটি দূর পোস্টিং প্রক্রিয়া (ধাপ যেখানে একটি জার্নাল লেনদেন লক এবং তার অ্যাকাউন্ট রয়েছে সে ক্ষেত্রে হয় মোট বিভিন্ন খাতায় প্রতিলিপি)।

আপনি যে ডেটা ডিজাইনটি শেষ করেন না কেন, ব্যালেন্স চেক করা হয় যেখানে প্রতিটি লেনদেনের ধরণের জন্য (যেমন সমতুল্য কাগজের সিস্টেমে প্রতিটি বিশেষায়িত জার্নাল ) একক পোস্টিং এন্ট্রি থাকা কীটি রয়েছে ।


আমার বক্তব্যটি হ'ল আপনার প্রস্তাবিত উভয় পন্থা হ'ল ডাবল-এন্ট্রি বুককিপিংয়ের আনসাউন্ড প্রক্রিয়া। প্রথম বিষয়: জার্নালগুলি খুব ভাল কারণে লেখার জন্য একবারের সারণী হয়। কখনও কখনও দুটি ভার্চুয়াল টেবিলগুলি মুলতুবি থাকা এন্ট্রি এবং পোস্ট এন্ট্রিগুলিকে একক ডেটা কাঠামোতে সংঘবদ্ধ করা হয় তবে ইসপোস্টড বিট সর্বদা লেখার জন্য থাকে এবং সিস্টেমকে অবশ্যই নিশ্চিত হওয়া উচিত যে কেবলমাত্র পোস্ট এন্ট্রি রেকর্ডের কেবল পঠনযোগ্য প্রকৃতি বজায় থাকে।

বিগত 800 বছর ধরে হিসাবরক্ষকরা যেভাবে জার্নাল এন্ট্রি পোস্ট করেছেন তা পুরোপুরি স্বাভাবিক করা হয়েছে । একটি কাগজ উপস্থাপনা এবং একটি শব্দ বৈদ্যুতিন উপস্থাপনা মধ্যে একমাত্র পার্থক্য হ'ল একটি ভাঁজ টেবিল কাঠামো পরবর্তী ক্ষেত্রে আরও সুবিধাজনক যখন পূর্ববর্তী একটি পাইভোটেড টেবিল কাঠামো, যা paতিহাসিকভাবে সবচেয়ে তাত্পর্যপূর্ণ ছিল যখন অত্যন্ত সমান্তরাল প্রক্রিয়াকরণটি পছন্দ হয়েছিল - অর্থাত্ প্রতিটি ক্লার্ক প্রতিটি একক বা অল্প সংখ্যক বিশেষায়িত জার্নাল বজায় রাখা। Theতিহাসিকভাবে কেবল নিয়ন্ত্রকের জেনারেল জার্নালের অনুমতি ছিল।

সাবধানতার সাথে নোট করুন যে উপরেরটিতে আমি উল্লেখ করেছি যে জার্নাল এন্ট্রিগুলি সম্পূর্ণরূপে স্বাভাবিক করা হয়েছে; জার্নাল এন্ট্রিগুলি প্রতিটি লেনদেনের জন্য নির্দিষ্ট জার্নালগুলিতে গোষ্ঠীভুক্ত সমস্ত লেনদেনের কালানুক্রমিক রেকর্ড। পোস্টিং এর জার্নাল এন্ট্রিগুলি লেজার করার জন্য একটি পৃথক প্রচেষ্টা এবং, যখন সম্পূর্ণরূপে তার নিজের উপর স্বাভাবিক, জার্নাল এন্ট্রিগুলি যেখানে সমস্ত লেনদেন সংক্ষিপ্ত করা হয় (সাধারণ লেজার) অথবা বিস্তারিত (উপ লেজার) অ্যাকাউন্ট দ্বারা একটি অপ্রয়োজনীয় কপি। জার্নাল এবং লেজার উভয়ই স্বতন্ত্রভাবে ডাবল-এন্ট্রি বুককিপিংয়ের কাজ করে।

@ কোডিজম যে কোনও অ্যাকাউন্টিং সিস্টেম, ডিইবি বা এসইবি, আপনাকে রেকর্ডকৃত সমস্ত অ্যাকাউন্টের জন্য সাধারণ প্রতিবেদন দেয় । নোট করুন যে, অভ্যন্তরীণভাবে, একটি উপ-লিডার সংজ্ঞা অনুসারে একক-প্রবেশের বুককিপিং রেকর্ড; অন্যদিকে ভারসাম্য পত্রকের সম্পর্কিত নিয়ন্ত্রণ অ্যাকাউন্ট (গুলি) । ডিইবি নিশ্চিত করে যে প্রতি সম্পদ ডলারের জন্য সম্পত্তির উপর ব্যবসায়ের দাবির সুনির্দিষ্ট রেকর্ড রয়েছে , অর্থ সম্পত্তির ইক্যুইটি তা কোনও debtণের ইক্যুইটি (ওরফে দায়বদ্ধতা) বা মালিকানা ইক্যুইটি , এবং সেই দাবির অগ্রাধিকার যদি সেই সংগঠন ইনলোভেন্ট হয়।


5

আমি কি আপনাকে পরামর্শ দিতে পারি যে আপনি এই অঞ্চলটিতে থাকা ওপেন সোর্স সফ্টওয়্যারটির কোষাগারটি একবার দেখুন?

" ওপেন সোর্স ডাবল এন্ট্রি অ্যাকাউন্টিং সফ্টওয়্যার " এর একটি গুগল তদন্তের বেশ কয়েকটি আশাব্যঞ্জক সুযোগ দেয়।

আপনি এখানে জিএনইউ অ্যাকাউন্টিং প্যাকেজটি দেখতে পারেন , বেশ কয়েকটি পর্যালোচনা সাইট ( 1 এবং 2 ) এবং অবশেষে ফ্রি সফটওয়্যারের একটি বিভাগ সহ অ্যাকাউন্টিং সফটওয়্যারটির উইকি

আমি নিশ্চিত যে এফ / লসস উত্স কোড এবং স্কিমার কয়েকটি পরীক্ষা করে আপনি কীভাবে স্কিমা এবং / অথবা সফ্টওয়্যার লিখতে পারেন যা আপনার নিজস্ব প্রয়োজনীয় প্রয়োজন অনুসারে কিছু ভাল ইঙ্গিত এবং ইঙ্গিত পেতে পারে।


1

আমার কাছে এমন একটি সিস্টেম রয়েছে যা ডাবললাইন করে এবং এর একক লাইন অ্যাকাউন্ট থাকার চেয়ে প্রচুর চ্যালেঞ্জ। ভারসাম্যহীন অ্যাকাউন্টের ফলস্বরূপ, আমি ডেবিট পাশের মতো কেবল এক লাইনের দিকে ধাক্কা দেওয়ার উদাহরণ পেয়েছি encountered এমনকি যদি প্রতিশ্রুতিবদ্ধতা এবং রোলব্যাকগুলি নিয়ন্ত্রণ না করা হয় তবে এটি একটি একক লাইন অ্যাকাউন্টে ঘটে না। শেষ অবধি, আপনার ডিবি দ্বিগুণ বৃদ্ধির হারে বৃদ্ধি পায়, আপনার প্রেরণের দ্বিতীয় লাইনে প্রচুর সদৃশ তথ্য থাকবে, দ্বিতীয় অ্যাকাউন্টের মধ্যে পার্থক্য কেবল difference সেই রুটে যাচ্ছি, একক লাইন অ্যাকাউন্ট ধরে রাখার পরামর্শ দিবে ..

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.