بنام خدا
با سلام
يكي از مشكلات بزرگي كه در برنامه هاي كاربردي مشاهده مي شود باگها و يا غير قابل اطمينان و يا متناقض بودن نتايج عمليات و يا گزارشات سيستم مي باشد كه در بسياري موارد نتيجه طراحي غير اصولي بانك اطلاعاتي برنامه كاربردي بوده و هزينه هاي زماني و ريالي زيادي جهت پشتيباني اينگونه نرم افزارها مورد نياز است در اين سري مقالات سعي مي گردد با زباني ساده و روان روش طراحي بانك اطلاعاتي رابطه اي شرح داده شود و در اين مسير مثالها متعددي آورده شده است.
از اين قسمت به بعد مراحل پنجگانه گفته شده در مقاله دوم را به صورت مفصل توضيح داده و مثالها و تصاوير مرتبط با هر كدام را خواهيم آورد.
در اين بخش به مرحله دوم تعيين و تشخيص هدف و مرحله سوم تعيين جداول مورد نياز خواهيم پرداخت.
تعيين و تشخيص هدف (Determining the Purpose) :
اولين مرحله در طراحي يك بانك اطلاعاتي تعيين كردن هدف اصلي بانك اطلاعاتي و اينكه براي چه كاري قرار است استفاده شود. اين هدف نماياننده اطلاعاتي است كه شما مي خواهيد از بانك اطلاعاتي استخراج نماييد و با توجه به اين هدف شما امكان شناسايي موضوعاتي كه شما مي بايست در خصوص آن حقايقي را ذخيره نموده (جداول – Tables) و همچنين حقايقي كه نياز به نگهداري در خصوص هر يك از اين موضوعات (فيلدهاي جدول - Fields) مي باشد را داريد.
براي تعيين اين هدف مي بايست كارهاي مختلفي انجام دهيد بطور مثال با افرادي كه قرار است از بانك اطلاعاتي استفاده نمايند مصاحبه نماييد. برگزاري جلسات طوفان فكري(Brainstorm) با موضوع "مسائلي كه مي خواهيد بانك اطلاعاتي توانايي پاسخگويي به آن را داشته باشد" يكي ديگر از انتخاب ها مي باشد. به علاوه مي توانيد با تهيه طرحهاي اوليه از گزارشاتي كه قرار است ايجاد شود به شناخت بهتر هدف كمك نماييد.نسبت به جمع آوري فرمهايي كه در حال حاضر جهت ثبت اطلاعات استفاده مي شود اقدام نماييد.
كليه اطلاعاتي كه با طرق بالا جمع آوري گرديده اند در مراحل مختلف طراحي قابل استفاده خواهند بود.
مثال : پيگيري فروش و انبارداري
فرض كنيد كه شركت Northwind ، يك شركت واردات و صادرات مي باشد كه در زمينه مواد غذايي خاص در سراسر جهان فعاليت نموده و خواهان يك بانك اطلاعاتي است كه به شركت توانايي پيگيري فروشها و همچنين اطلاعات انبارداري (موجودي) را بدهد.
ابتدا با نوشتن ليستي از پرسشهايي كه مي بايست بانك اطلاعاتي توانايي پاسخگويي به آنها را داشته باشد آغاز مي نماييم :
- فروش هر يك از محصولات در ماه قبل چه مقدار بوده است؟
- بهترين مشتريان ما از كدام مناطق هستند؟
- تامين كننده محصولات با بالاترين فروش كيست؟
سپس ، نسبت به جمع آوري كليه فرمها و گزارشاتي كه شامل اطلاعات مورد نياز در بانك مي باشد اقدام نماييد. مثلا در حال حاضر شركت Northwind از يك گزارش چاپي حاوي ليست محصولاتي كه سفارش داده شده اند استفاده مي نمايد و همچنين فرمي جهت ثبت اطلاعات يك سفارش جديد دارد بنابراين شما مي بايست اين دو را تهيه و براي مراحل بعد بررسي نماييد.
در حين مصاحبه ها متوجه مي شويد كه شركت همچنين به يك ليست چاپي حاوي اطلاعات پستي مشتريان ، پرسنل و تامين كنندگان مي باشد.
بعد از جمع آوري اين اطلاعات شما آماده رفتن به مرحله بعد مي باشيد.
تعيين جداولي كه شما نياز داريد (Determining the Tables You Need) :
تعيين و تشخيص جداول مورد نياز مي تواند سخت ترين و زيركانه ترين مرحله در طراحي بانك اطلاعاتي باشد و اين به خاطر آن است كه تعيين كننده نتايجي است كه شما از بانك اطلاعاتي انتظار داريد.(شامل گزارشاتي كه مي خواهيد چاپ نماييد/فرمهاي مورد استفاده در فرايند كاري/پرسش هايي كه مي خواهيد پاسخ داده شود).
تعيين جداول لزوما اطلاعاتي در خصوص ساختار جداول به شما نمي دهد. آنها به شما آنچه كه مي خواهيد بدانيد را گفته ولي شامل چگونگي طبقه بندي اطلاعات در داخل جداول نمي باشد.
فرم سفارش (Order Form) كه بالا آمد را نگاه كنيد اين فرم شامل حقايقي در خصوص مشتري – آدرس مشتري (Customer Order) و شماره تلفن (Phone Number) – و همچنين حقايق در خصوص سفارش – نام محصول (Product Name) ، قيمت واحد (Unit Price) و ... – مي باشد. اين فرم تعدادي از حقايقي كه نياز است در بانك ذخيره نماييد را مشخص مي نمايد اما شما اگر حقايق مرتبط با مشتري و حقايق مرتبط با سفارش را در يك جدول ذخيره نماييد مطمئنا دچار مشكلات ذيل خواهيد شد :
· خطاپذيري به سبب داده هاي تكراري : فرض نماييد كه يك مشتري تا كنون سه سفارش داشته است. در اين حالت شما مي توانيد براي هر سفارش يكبار آدرس و شماره تلفن مشتري را به بانك اطلاعاتي خود اضافه نماييد. اما اين چندباري احتمال خطا در ورود اطلاعات را زياد مي نمايد.
از طرفي ، اگر محل سكونت يك مشتري تغيير نمايد شما يا بايد تناقض در اطلاعات را بپذيريد و يا اينكه كليه اطلاعات فروش به مشتري را پيدا كرده و نسبت به تغيير آدرس هر كدام اقدام نماييد.بنابراين بسيار بهتر است يك جدول با عنوان Customer ايجاد و اطلاعاتي نظير آدرس و شماره تلفن را تنها يكبار براي هر مشتري وارد نماييد و سپس در صورت نياز به تغيير ، تنها احتياج به يك تغيير خواهيد داشت.
· حذف اطلاعات ارزشمند : فرض نماييد يك مشتري جديد كه تا كنون تنها يك سفارش داشته است سفارش خود را لغو نمايد هنگامي كه شما سفارش را از جدولي كه شامل اطلاعات مشتري و سفارش بصورت همزمان مي باشد حذف نماييد شما همچنين آدرس و تلفن مشتري را نيز حذف نموده ايد اما شما نياز داريد اين اطلاعات را نگهداري نموده تا بتوانيد كاتالوگ محصولات خود را براي او ارسال نماييد. دوباره همان نتيجه حالت قبل بدست آمد يعني بهتر است اطلاعات مشتري در جدول جداگانه اي ذخيره شود در اين صورت شما مي توانيد بدون حذف اطلاعات مشتري تنها اطلاعات مربوط به سفارش لغو شده را حذف نماييد.
با دقت در اطلاعاتي كه مي خواهيد از بانك اطلاعاتي استخراج نماييد نگريسته و آن را به موضوعات اساسي كه مي خواهيد قابل پيگيري باشد تقسيم نماييد بطور مثال مشتريان ، كارمندان ، محصولات ، خدمات قابل ارائه و ... ، هر كدام از اين موضوعات يك كانديد براي يك جدول جداگانه مي باشد.
نكته : يك استراتژي براي تقسيم اطلاعات در قالب جداول دقت در حقايق مختلف و تعيين اينكه آن حقيقت مرتبط با چه موضوعيست مي باشد.براي مثال ، در فرم سفارش بالا ، آدرس مشتري مرتبط با فروش نيست آن مرتبط با مشتري مي باشد كه اين شما را به ايجاد يك جدول جداگانه براي مشتريان رهنمون مي سازد. در محصولات در گزارش سفارش بالا ، شماره تلفن تامين كننده مرتبط با محصولات در انبار نبوده و مرتبط با تامين كننده مي باشد و بالطبع شما را به ايجاد جدولي جهت تامين كنندگان رهنمون مي سازد.
مثال : تعيين جداول بانك اطلاعاتي Northwind :
فرم سفارش و همچنين محصولات موجود در گزارش سفارش شامل اطلاعاتي با موضوعات ذيل مي باشد :
· مشتريان
· تامين كنندگان
· محصولات
· سفارشات
با كمك اين ليست شما مي توانيد طرح اوليه از جداول بانك اطلاعاتي و همچنين تعدادي از فيلدهاي هر كدام به دست آوريد بانك نهايي Northwind شامل تعداد بيشتري جدول خواهد بود و در ادامه خواهيد ديد كه چگونه جداول ديگري را براي بهبود طراحي اضافه خواهيم نمود.
خوب دوستان اينم از اين قسمت – سري بعد ادامه اين مطلب رو با هم مرور مي كنيم
اميدوارم از اين مطالب استفاده كنيد و براتون مفيد باشه لطفا نظرات اصلاحي و تكميلي خودتون رو در قسمت نظرات بگيد
و من ا... التوفيق – مدير سايت
درباره من : من مهدی امینی متولد 1352 در حدود 15 سال در زمینه مختلف مرتبط با پروژه های نرم افزاری فعالیت دارم عمده فعالیتهای جاری اینجانب در خصوص مدیریت پروژه های نرم افزاری . طراحی سیستمی و فرایندی فعالیتها و مدیریت تیمهای طراحی و برنامه نویسی می باشد.