من الصعب إعداة تنسيق المقاله بشكلها الأصلي ... لقراءة المقالة بتنسيق جيد أنقر هنا : http://www.orwah.net....php?storyid=82 مباديء في تصميم قواعد البيانات مقدمة: معظم المبرمجين ليسوا مؤهلين لإدارة قواعد البيانات أو لتصميم نماذج ضخمه منها . ولكنهم مضطرون دائما للتعامل معها من خلال مشاريعهم البرمجية المختلفة والتي كثيرا ماتكون ذات صلة كبيرة بقواعد البيانات نظرا لحاجات السوق . - ستغطي هذه المقاله بعض المباديء الأساسية لتصميم وتشكيل فواعد البيانات , وستحوي إجراءات وقائية وآداب التعامل مع قواعد البيانات لغير المختصين أمثالنا والذين لايودون قضاء السنين اللاحقة من حياتهم في مناهج إدارة وتصميم قواعد البيانات .. وهي موجهة للمبرمجين المتآلفين مع برمجة قواعد البيانات المبنية على المزود , وبالتأكيد عبارات Sql كذلك . -------------------------------------------------------------------------------- من أهم الأمور التي يمكننا التفكير بها عند تصميم قاعدة بيانات هي المرونه , الاستقرارية , قابلية التوسع , الأمن .. سأحاول الجمع بين هذه الأهداف في مجموعة من النقاط المفيده , وأعلم أنها ليست بالكثير , ولكن ربما يستفيد منها آخرون مهتمون بتطبيقات قواعد البيانات , ويعانون مشاكل مع تطبيقاتهم بمجرد أن تكبر قاعدة بيانهم قليلا فوق الحد الذي اعتادوا عليه .. - أشياء من المهم تجنبها كلمات قد تكون محجوزة : عندما تعطي الحقول والجداول أسماء فعليك الحذر من استخدام أسماء قد تكون محجوزة (reserved words) , ومن المهم ان تلاحظ أن عدم كون بعض الكلمات المشهورة محجوزة في قاعدة بياناتك الحالية لايعني أنها لن تكون كذلك في المستقبل أو في قاعدة بيانات أخرى , مما يصّعب موضوع ترقية قاعدة البيانات المستخدمه أو تغييرها . خاصة أن التصميم الجيد لقاعدة البيانات يضع في الحسبان أن أي قاعدة بيانات قد يتم ترقيتها توريدها بالمستقبل لأنظمة وتطبيقات أخرى . مثال على بعض الكلمات: Name, Order, By, Sort, Number, Currency, Text, Desc, Date, Time, Username, Password, Group, Data, Min and Max. لفترة طويلة كنت أستخدم البعض منها مثل Name و Desc , ولكني الآن أعرف تماما مدى خطأ ذلك , فالكلمة Desc هي أحد معرفات "modifier" العبارة Order By في Sql . ولاتعرف متى تظهر لك المشاكل عند حدوث تشابه كهذا , بامكانك مثلا استخدام اكلمة Descr بدلا منها . للأسف استخدام بعض هذه الأسماء لايزال شائعا مثل Name و Text رغم وجود الكثير من التحذيرات بالابتعاد عنه . وكحل جذري أنصح باستخدام بادئه لكل حقول الجدول , ربما تمثل الحروف الأولى من الجدول , مثل dept_name بدلا من name حيث dept اختصار Departmint أي جدول الفروع . لاتستخدم اللغة العربية في التسمية وهذه من النصائح الشائعة في منطقتنا . المشكله ليست بالأسماء العربية فقط , بل بأي إسم بغير اللغة الإنكليزية , لإن اللغة الإنكليزية هي الوحيدة المضمون وجودها على الجهاز , والمضمون دعم برنامج إدارة قواعد البيانات ولغة البرمجة لها .حتى اللغة الإنكليزية عليك مراعاة القواعد والنصائح وقيود التسمية بها , فما بالك أن تسمي أسماء حقول أو غيرها باستخدام لغات اخرى كاللغة العربية مثلا !! ولو كان برنامج إدارة قواعد البيانات DBMS يدعم التسمية باللغة العربية فمن الخطورة البالغة القيام به , ستواجهك مشاكل مع لغة البرمجة , كما أنك قد تقرر في أي لحظة نقل القاعدة إلى نظام إدارة قواعد بيانات جديد قد لايدعم على الغالب الأسماء العربية , وغيرها من المشاكل التي قد تقضي على المشروع فقط بسبب عدم مراعاته للقياسية . لاتكرر الأسماء على مستوى قاعدة البيانات الجميع يعرف أنه لايجب تكرار أسماء الحقول في جدول واحد . ولكن النصيحة الآن أن لاتكرر أسماء الحقول أو الجداول على صعيد قاعدة البيانات كلها وليس فقط ضمن الجدول نفسه أو الSchema نفسها , أي لاتضع الحقل name في جدولين مختلفين , برأيي طريقة وضع بادءة للحقول تعتبر مناسبه لحل هذه المشكلة أيضا قواعد أساسية وأفكار مفيدة اجعل أسماء الجداول والكيانات بالمفرد singular تكررت معي هذه القاعدة كثيرا , سواء بالOOP أو بمفاهيم هندسة لبرمجيات أو UML أو قواعد البيانات أو غيرها , .. لايوجد سبب أساسي , ولكن هذا يعتبر عرف تقني يسير عليه الاخصائيون منذ زمن . فقط تذكر معي كم مره واجهت نفسك أثناء كتابة عبارة Sql إذا كان الجدول customer أم customers ؟ لابأس قد تقول إني متأكد أن الجدول يكون بالعادة customer , لكن ماذا عن حالات أخرى مثل order_line بدلا من order_lines مع أن العلاقة علاقة رأس بإطراف ؟ . إذا راجعت الأمثلة الشهيرة والشفرات المفتوحة ستجد هذه القاعدة تطبق في 100% من الحالات , ولابأس بتطبيقها من قبلك كي تبقى داخل السياق . وتتأكد من عدم خروجك عن المألوف الذي يضمن لك السلامه تجنب الإختصارات Abbreviations مالم يكن الاختصار واضحا تماما , أو ضروريا , فلا تكثر من استخدام الاختصارات في قاعدة بياناتك , وأضعف الإيمان أحرص على أن تكون واضحه ولاريب فيها . دعني مثلا أجرب أن أقدم بعض الأمثلة التي قد تدل على أكثر من معنى :
Name Possible Meanings Inv_ID Inventory? Invoice? Investment? Disc_Code Discontinued? Discount? Discovery? Item_Ct Count? Connector? Prod_Count Product? Produced? Production? Proj_Amt Project? Projected? Ext_Rate Extension? External? Extra? Org Organization? Originator? Origin? Orangutang? (Just seeing if you are paying attention) Req_ID Requisition? Request? Rec_ID Received? Recipient? Receipt? Recovered? Cat Catalog? Category? Grp_Code Group? Grouping? Comp_ID Company? Compensation? Compreshensive
Name Meaning Pkg Package No Number Qty Quantity Hdr Header Attn Attention Addr Address Alt Alternate Dept Department Exp Expiration Seq Sequence Mgr Manager Amt Amount Min Minimum Max Maximum Doc Document
Update Need_update Phone has_phone Modified Was_modified or is_modified