Ahmed Aljaberi
Ahmed Aljaberi

@ahmed_aljabri

16 تغريدة 98 قراءة Feb 29, 2020
كيف نختار الData Type الأنسب لبياناتنا ؟
اولاً حدد طبيعة البيانات , هل هي نصية ؟ ام رقمية ؟ او منطقية ( نعم , لا ). الموضوع ليس بالسهولة , مثلا رقم الهاتف نراه رقمي لكن ليس بالضرورة ان يخزن في حقل من نوع رقمي.
(سلسلة )
رقم الهاتف صحيح انه رقمي , لكن هل سنقوم بأي عملية حسابية عليه ؟ هل سنجمع رقمي هاتف او نطرحهما من بعضهما ؟ طبعاً لا. إذا فهو نصي.
رقم الهوية في انحاء العالم يشبه رقم الهاتف لكن قد نقوم بعمليات رياضية عليه للتحقق , فأرقام الهويات عادة لها معادلة للتحقق من صحتها ..
كان نأخذ الرقم الاول ثم نجمعه بالثاني
و نضربه في الثالث ثم نأخذ اول عدد من الناتج و نقارنه بأخر رقم , اذا مطابق فالرقم صحيح وإلا فلا.
لاحظ اننا في ارقام الهويات احتجنا عمليات حسابية , لكن لنقول خذ الرقم في الخانة الرابعة او السادسة فهذا عمل النصوص و ليس الارقام. فلو تم تخزينه في نوع عددي سنحتاج إلى تحويله إلى نص.
ايضاً قد نحتاج إلى اضافة فواصل بين الأرقام لتسهيل قراءتها , هذا ايضاً يقودنا لنوع الحقل النصي.
لنأتي الان إلى الأنواع الرقمية , القاعدة الذهبية هنا تقول: اختر اصغر نوع ممكن لبياناتك مع الأخذ في الحسبان الاحتياج المستقبلي, هذا يعتمد على احتياجات عميلك. عدد عملائه هل يمكن أن يزيد عن 65 الف خلال 10 سنوات مثلاً ؟ إذا لا اختر smallint
لا تستهلك int إلا اذا كنت في حاجته ففي الاخير هذه مساحة مستهلكة بدون فائدة. انظر إلى تسلسل ارقام فواتيره , او عقوده و خذ الأنسب. هناك نوع byte او tinyint يقبل حتى 255 و هذا كافي مثلا للدول.
ايضاً بالنسبة للأنواع الرقمية فلديك اعداد صحيحة من فئة الint و مشتقاتها و لديك من النوع float او single ذو الفاصلة العشرية. اذا اردت تخزين مبالغ مالية فقد يكفيك float بدل double لكن اختر دائماً decimal لأنك لا تستطيع التنبؤ بالعمليات الحسابية التي ستنفذ بتلك الأرقام.
سمي single لانه ياخذ WORD من الذاكرة (32 بت ) اما الdouble فيأخذ اثنين و الdecimal يأخذ اربعة. الsingle و الdouble تسميات من الماضي قد لا تكون صحيحة الان.
التعامل مع الfloat اسرع من الdouble و اسرع من الdecimal و لذا نجد اغلب المكتبات الخاصة بتحليل البيانات تستخدم float.
قد تستخدم double مع بيانات المواقع الجغرافية حسب الدقة التي تحتاجها و قد تكفيك float لتخزين اوزان بدقة بسيطة.
الdouble يحجز ضعف الfloat من الذاكرة و الdecimal ضعف الdouble. هذا غير ان هناك اختلاف على طريقة تخزينها فالاول و الثاني binary و الثالث عشري.
نأتي الان الى تخزين الId. الشركات الكبيرة لا تستخدم الأرقام , مثلا تويتر تعطي لكل تغريدة رقم عشوائي عبارة عن حروف و ارقام. ليس لقلة الأرقام و لكن لسهولة توزيع البيانات و تقسيمها على اكثر من سيرفر.
فلو وضعت عدد تزايدي ثم احتجت لاكثر من قاعدة بيانات لتشارك البيانات فقد يكون هناك تكرار في الأرقام.
بالنسبة للحقول النصية , اذا كان عدد الخانات معروف لدينا مثل ارقام الهواتف او الهويات اختر char مع عدد الخانات , او varchar في حالة كونها متغيرة او غير معروفة مع تحديد اعلى عدد يمكن ان تصل اليه.
هذا في قواعد البيانات و ايضا في البرامج لكن سيكون string بدل varchar في اغلب اللغات.
في قواعد البيانات هناك انواع مثل nvarchar أو nchar هذا تختارها إذا كنت ستستخدم لغات غير الانجليزية او خليط بين الانجليزية و غيرها. الvarchar اقل حجماً من الnvarchar في المساحة التخزينية.
التواريخ في قواعد البيانات لديك smalldatetime و لديك datetime يأخذ تقريباً ضعف الاول من الذاكرة و الأداء لكنه اسلم في الاستخدام لدقته خصوصاً اذا كنت ستستخدمه كحقل للأحداث.
اصبحت قواعد البيانات تدعم الكثير من الانواع الجاهزة , مثل Money او JSON او XML او Spatial للاحداثيات. ضعها في حسبانك و ضع احتمالية تخليك عن قاعدة بياناتك الحالية إلى أخرى قد لا تدعم مثل تلك الانواع.

جاري تحميل الاقتراحات...