আমি পোস্টগ্রেএসকিউএল ব্যবহার করছি তবে আমি বেশিরভাগ শীর্ষ-ডিবির ডিবি'র কিছুটা অনুরূপ দক্ষতা থাকতে হবে এবং তদুপরি, তাদের সমাধানগুলি আমার জন্য সমাধানগুলি অনুপ্রাণিত করতে পারে, সুতরাং এই পোস্টগ্র্যাসকিউএল-নির্দিষ্ট বিবেচনা করবেন না।
আমি জানি যে আমি এই সমস্যাটি সমাধান করার চেষ্টা করার আগে প্রথম নই তাই আমি এখানে জিজ্ঞাসা করা ভাল বলে মনে করি তবে অ্যাকাউন্টিং ডেটা মডেলিংয়ের ব্যয়গুলি মূল্যায়নের চেষ্টা করছি যাতে প্রতিটি লেনদেন মৌলিকভাবে সুষম হয় is অ্যাকাউন্টিং ডেটা কেবলমাত্র পরিশিষ্ট। সামগ্রিক সীমাবদ্ধতা (সিউডো-কোডে লিখিত) এখানে দেখতে প্রায় লাগবে:
CREATE TABLE journal_entry (
id bigserial not null unique, --artificial candidate key
journal_type_id int references journal_type(id),
reference text, -- source document identifier, unique per journal
date_posted date not null,
PRIMARY KEY (journal_type_id, reference)
);
CREATE TABLE journal_line (
entry_id bigint references journal_entry(id),
account_id int not null references account(id),
amount numeric not null,
line_id bigserial not null unique,
CHECK ((sum(amount) over (partition by entry_id) = 0) -- this won't work
);
অবশ্যই এই ধরনের চেক সীমাবদ্ধতা কখনই কাজ করবে না। এটি প্রতি সারিতে কাজ করে এবং পুরো ডিবিতে পরীক্ষা করতে পারে। সুতরাং এটি সর্বদা ব্যর্থ হবে এবং এটি করতে ধীর হবে।
সুতরাং আমার প্রশ্ন এই সীমাবদ্ধতা মডেল করার সেরা উপায় কি? আমি মূলত এ পর্যন্ত দুটি ধারণার দিকে নজর রেখেছি। ভাবছেন যে এগুলি একমাত্র, বা যদি কারওর থেকে ভালতর উপায় থাকে (এটি অ্যাপ্লিকেশন স্তরে বা একটি সঞ্চিত প্রোকে ছেড়ে যাওয়া ব্যতীত)।
- আসল প্রবেশের বই এবং চূড়ান্ত প্রবেশের বইয়ের জেনারেল জেনারেল জেনারেল জেনারেল (জেনারেল জেনারেল জেনারেল জেনারেল) এর মধ্যে পার্থক্য সম্পর্কে অ্যাকাউন্টিং জগতের ধারণা থেকে আমি একটি পৃষ্ঠা ধার করতে পারি। এই বিষয়ে আমি জার্নাল এন্ট্রি সংযুক্ত জার্নাল লাইনের একটি অ্যারে হিসাবে এটিকে মডেল করতে পারি, অ্যারেতে সীমাবদ্ধতা প্রয়োগ করতে পারি (পোস্টগ্রেএসকিউএল পদগুলিতে, অজানা (je.line_items) থেকে যোগফল (পরিমাণ) = 0 নির্বাচন করুন A একটি ট্রিগার প্রসারিত হতে পারে এবং এগুলি একটি লাইন আইটেম সারণীতে সংরক্ষণ করুন, যেখানে পৃথক কলামের সীমাবদ্ধতাগুলি আরও সহজেই প্রয়োগ করা যেতে পারে এবং যেখানে সূচিপত্রগুলি আরও কার্যকর হতে পারে This এটিই আমি যে দিকে ঝুঁকছি।
- আমি একটি সীমাবদ্ধ ট্রিগার কোড করার চেষ্টা করতে পারি যা 0 এর সিরিজের যোগফল সর্বদা 0 হবে এই ধারণা দিয়ে এই প্রতি লেনদেনকে কার্যকর করবে would
আমি এগুলি একটি সঞ্চিত পদ্ধতিতে যুক্তি প্রয়োগের বর্তমান পদ্ধতির বিপরীতে বিবেচনা করছি। প্রতিবন্ধকতার গাণিতিক প্রমাণ ইউনিট পরীক্ষার চেয়ে উচ্চতর এই ধারণার বিরুদ্ধে জটিলতার ব্যয়টি ওজন করা হচ্ছে। উপরের # 1 এর প্রধান ত্রুটিটি হ'ল পোস্টগ্র্রেএসকিউএল-এর সেই অঞ্চলগুলির মধ্যে টিউপস হিসাবে প্রকারগুলি হ'ল যেখানে কোনওটি বেমানান আচরণে চলে এবং নিয়মিত অনুমানগুলিতে পরিবর্তিত হয় এবং তাই আমি আশাবাদী যে সময়ের সাথে এই অঞ্চলে আচরণের পরিবর্তন হতে পারে। ভবিষ্যতের নিরাপদ সংস্করণ ডিজাইন করা এত সহজ নয়।
এই সমস্যাটি সমাধানের অন্যান্য উপায় কি যা প্রতিটি টেবিলে কয়েক মিলিয়ন রেকর্ড পর্যন্ত ছড়িয়ে যায়? আমি কিছু অনুপস্থিত করছি? আমি কি কোন ট্রেড অফ মিস করেছি?
সংস্করণ সম্পর্কে ক্রেগের নীচের বক্তব্যের প্রতিক্রিয়া হিসাবে, সর্বনিম্ন, এটি পোস্টগ্র্রেএসকিউএল ৯.২ এবং উচ্চতর (সম্ভবত 9.1 এবং উচ্চতর, তবে সম্ভবত আমরা সরাসরি 9.2 সহ যেতে পারি) চালাতে হবে।