بنية شجرة المحاسبة في قواعد البيانات
مثلا
اسم الحساب | رمز الحساب |
---|---|
محمد | 123 |
إذا الأب هو 12 سعيد
و الجد هو 1 عدنان
و لكن افترضنا جدلا أن رمز الحساب لكل واحد مؤلف من خانة واحدة، بالتالي يحق لكل حساب 10 أبناء فقط أو تسعة إذا رفضنا الصفر
اسم الحساب | رمز الحساب |
---|---|
محمد | 010203 |
هنا خانتين لكل اسم و كثير من البرامج المحاسبية تعتمد هذه المعالجة و تحدد عدد معين من الخانات لكل مستوى
و للأسف هذا أصبح قاعدة عند كل المبرمجين (عدا البعض)
أيضا يقومون بتخزين رمز الحساب في جدول اليومية
مثلا
القيمة | رمز الحساب |
---|---|
1000 | 010203 |
أي أن علاقة جدول اليومية بجدول الحساب تتم عبر رمز الحساب وهو قيمة نصية string أي إن عملية استرجاع القيمة من
الجدول تتم من خلال البحث عن قيمة نصية، و حتى إذا استعملت أقوى قواعد البيانات فإن ذلك سيبطئ من سرعة التقارير.
إذا، يفضل إدخال مفتاح أساسي ذو طبيعة رقمية Integer و يعبر عنه ب ID أو AccID وهذا الحقل هو متزايد تلقائيا و فريد
طيب، كيف سنربط الحساب بأبيه؟
من خلال حقل آخر أيضا من نوع Integer نسميه مثلا AccParent لنرى ما حل بشجرتنا السابقة
Name | Code | AccParent | AccID |
---|---|---|---|
عدنان | 01 | 0 | 1 |
سعيد | 0102 | 1 | 2 |
محمد | 010203 | 2 | 3 |
و يمكن استعمال الحقل AccId في دفتر اليومية
القيمة | AccID معرف الحساب |
---|---|
1000 | 3 |
كيف نجلب الشجرة
هناك عدة طرق و أبسطها
قم باستعلام عن الحسابات ذات الأب صفر أي بدون أب (يتيمة) AccParent=0
أثناء تعبئة الحسابات في Tree أو List أي عند كل إدراج لحساب في القائمة قم بالاستعلام عن أبناء هذا الحساب
AccParent=AccID
يفضل إنشاء تابع يقوم بالتعبئة مثلا FillChilds(0) و عند تعبئة كل حساب نقوم باستعداء نفس التابع و لكن للمعرف الحساب
المدرج مثلا FillChilds(AccId) وهكذا حلقة تعاودية
و لزيادة سرعة التعبئة قم بإنشاء فهرس على الحقل AccParent و من أجل سحب البيانات مرتبة حسب الاسم أنشئ هذا
الفهرس على الحقلين AccParent ثم Name
أحدث التعليقات