ما هي أفضل طريقة لتخزين قيمة مالية في قاعدة البيانات؟

StackOverflow https://stackoverflow.com/questions/618056

  •  03-07-2019
  •  | 
  •  

سؤال

أحتاج إلى تخزين بعض الحقول المتعلقة بالمال في قاعدة البيانات ولكني لست متأكدًا من نوع البيانات الذي يجب استخدامه بينهما مال و عدد عشري.

هل كانت مفيدة؟

المحلول

العشري والمال يجب أن تكون موثوقة جدا.ما يمكنني أن أؤكده لك (من تجربة شخصية مؤلمة من التطبيقات الموروثة) هو لا استخدام تعويم!

نصائح أخرى

أستخدم دائمًا العلامة العشرية؛لم تستخدم المال من قبل.

لقد عثرت مؤخرًا على مقالة بخصوص نوع البيانات العشرية مقابل النقود في خادم Sql والتي قد تجدها مثيرة للاهتمام:

المال مقابل عشري

ويبدو أيضًا أن نوع البيانات money لا يؤدي دائمًا إلى نتائج دقيقة عند إجراء العمليات الحسابية به: انقر

ما فعلته أيضًا في الماضي هو استخدام حقل INT وتخزين المبلغ بالسنت (يوروسنت / دولار سنت).

أعتقد أن الأمر يتعلق بالدقة والحجم.آي آر سي, money هو 4DP.إذا كان ذلك جيدًا، money يعبر عن نيتك.إذا كنت تريد المزيد من التحكم، استخدم decimal بدقة وحجم محددين.

ذلك يعتمد على التطبيق الخاص بك!!!أنا أعمل في مجال الخدمات المالية حيث نعتبر عادةً أن السعر مهم لخمس منازل عشرية بعد هذه النقطة، وهو بالطبع مبلغ كبير عند شراء بضعة ملايين بسعر 3.12345 بنس/سنت.ستوفر بعض التطبيقات نوع SQL الخاص بها للتعامل مع هذا الأمر.

ومن ناحية أخرى، قد لا يكون هذا ضروريا.</فكاهة>

لا تقم بمحاذاة أفكارك بناءً على أنواع البيانات المتاحة.بدلاً من ذلك، قم بتحليل متطلباتك ثم تعرف على نوع البيانات الذي يناسبك بشكل أفضل.يعد Float هو الخيار الأسوأ في أي وقت نظرًا لمحدودية البنية في تخزين الإصدار الثنائي لأرقام الفاصلة العائمة.المال هو وحدة قياسية وسيحظى بالتأكيد بمزيد من الدعم للتعامل مع العمليات المتعلقة بالمال.في حالة النظام العشري، سيتعين عليك التعامل مع كل شيء ولكنك تعلم أنك وحدك من يتعامل مع النوع العشري، وبالتالي لا توجد مفاجآت قد تحصل عليها مع نوعين آخرين من البيانات.

استخدم العلامة العشرية واستخدم منازل عشرية أكثر مما تعتقد أنك ستحتاج إليه حتى تكون الحسابات صحيحة.لا يُرجع المال دائمًا النتائج الصحيحة في العمليات الحسابية.لا تستخدم تحت أي ظرف من الظروف التعويم أو الحقيقي لأن هذه أنواع بيانات غير دقيقة ويمكن أن تتسبب في حسابات خاطئة (خاصة أنها تصبح أكثر تعقيدًا).

بالنسبة لبعض البيانات (مثل المال) حيث لا تريد أي تقريب أو تغييرات بسبب القيمة العائمة، يجب عليك التأكد من أن البيانات ليست "عائمة" أبدًا، ويجب أن تكون جامدة على جانبي العلامة العشرية.
إحدى الطرق السهلة لتكون آمنًا هي تحديد القيمة عن طريق تحويلها إلى نوع بيانات عدد صحيح، والتأكد من وضع العلامة العشرية في الموقع الصحيح أثناء استرجاع القيمة.
على سبيل المثال
1.لتوفير 240.10 دولارًا في قاعدة البيانات.
2.تحويله إلى شكل متكامل خالص:24010 (كما تعلم أنه مجرد تحول في العلامة العشرية).
3.إعادته إلى الحالة العشرية الصحيحة.ضع العلامة العشرية في موضعين من اليمين.240.10 دولارًا

لذلك، أثناء وجودها في قاعدة البيانات، ستكون في شكل عدد صحيح جامد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top