بنام خدا

با سلام

يكي از مشكلات بزرگي كه در برنامه هاي كاربردي مشاهده مي شود باگها و يا غير قابل اطمينان و يا متناقض بودن نتايج عمليات و يا گزارشات سيستم مي باشد كه در بسياري موارد نتيجه طراحي غير اصولي بانك اطلاعاتي برنامه كاربردي بوده و هزينه هاي زماني و ريالي زيادي جهت پشتيباني اينگونه نرم افزارها مورد نياز است در اين سري مقالات سعي مي گردد با زباني ساده و روان روش طراحي بانك اطلاعاتي رابطه اي شرح داده شود و در اين مسير مثالهاي متعددي آورده شده است.

منبع : این مطالب از سایت مایکروسافت بوده که در مواردی موضوعات را بیشتر شرح داده و یا مثالهایی را به آن اضافه نموده ام همچنین اصل مقاله مرتبط با بانک اطلاعاتی اكسس بوده كه سعي شده موضوعات كلي تر شده و در مثالها از بانك SQL Server استفاده شود.

در اين بخش به ادامه مبحث مرحله چهارم (تعيين و تشخيص فيلدهاي مورد نياز) خواهيم پرداخت.

مثال : اضافه كردن فيلدها به جدول محصولات : شركت بازرگاني  Northwind فروش محصولات غذايي وارداتي را در كشورهاي مختلف انجام مي دهد. كارمندان شركت از يك گزارش با عنوان "محصولات يك سفارش" (Products On Order) براي پيگيري محصولاتي كه سفارش داده شده است استفاده مي نمايند.

 

 

گزارش فوق بيانگر آن است كه جدول محصولات كه شامل حقايقي درباره محصولات فروخته شده مي باشد مي بايست شامل فيلدهايي براي نام  محصول (Product Name) ، موجودي انبار ، ميزان سفارش و موارد ديگر باشد. اما نظر شما در مورد فيلدهايي نظير نام تامين كننده (Supplier Name) و شماره تلفن تامين كننده (Phone Number) چيست ؟ براي ايجاد گزارش شما نياز داريد تا تامين كننده هر محصول را بدانيد.

يك راه گنجانيدن فيلدهاي Supplier Name و Phone Number به جدول Products مي باشد اما اين اقدام دردسرهاي زيادي ايجاد مي نمايد تا بخواهد مشكل را حل نمايد. از آنجاييكه شركت Northwind ممكن است از يك تامين كننده محصولات مختلفي خريداري نمايد نام و شماره تلفن تامين كننده مي بايست چندين بار در جدول Products تكرار گردد و به فرض اگر شماره تلفن تامين كننده تغيير نمايد تغيير مربوطه مي بايست بر روي كليه محصولاتي كه از او تامين شده است صورت پذيرد.

تا حال جداول به شكل ذيل مي باشند و در ادامه باز هم بهينه خواهند شد.

Products:

  • Product Name
  • Unit Price
  • Units In Stock
  • Units On Order

Supplier:

  • Company Name
  • Address
  • Contact
  • Phone

در عوض ، يك جدول با عنوان تامين كننده (Supplier) ايجاد نماييد كه دو فيلد جداگانه براي نام و شماره تلفن تامين كننده دارد.در مرحله بعد ، شما فيلدي به جدول محصولات اضافه خواهيد نمود كه به وسيله آن بتوان مشخصات تامين كننده مربوطه را تشخيص داد.

فيلدهاي كليد اصلي (Primary Key Fields) :

قدرت بانكهاي اطلاعاتي رابطه اي (Relational Database Management System - RDBMS) نظير MS SQL Server ، Oracle و ... ناشي از توانايي آنها در قابليت هايي نظير جستجوي سريع و بازيابي اطلاعات ذخيره شده در جداول مختلف با هم مي باشد. براي كارايي حداكثري بانك هاي اطلاعاتي ، هر جدول مي بايست شامل يك فيلد و يا يك مجموعه از فيلدها (بصورت تركيبي) باشد كه بصورت منحصر به فرد ، معرف هر ركورد مجزاي ذخيره شده در جدول باشد.در اكثر موارد يك عدد منحصر به فرد نظير شماره پرسنلي‌ (Employee ID) و يا شماره سريال (Serial Number) اين نقش را عهده دار مي باشند. در اصصلاحات بانك هاي اطلاعاتي به اين اطلاعات كليد اصلي (Primary Key) جدول گفته مي شود. بانك اطلاعاتي از كليد اصلي در راستاي سريعتر شدن ارتباط اطلاعات بين جداول مختلف و بازيابي اطلاعات از چند جدول مختلف استفاده مي نمايد.

اگر شما در حال حاضر اطلاعاتي نظير كد محصول(Product Number) طراحي نموده ايد كه بصورت منحصر به فرد معرف محصولات شما مي باشد شما مي توانيد از آن به عنوان كليد اصلي جدول مربوطه استفاده نماييد. اما ابتدا مطمئن شويد كه مقادير فيلد كليد براي ركورد هاي مختلف ، متفاوت خواهد بود.بانك هاي اطلاعاتي اجازه ورود اطلاعات تكراري را در فيلد كليد اصلي نخواهند داد. بطور مثال از فيلد نام پرسنل به عنوان كليد اصلي استفاده ننماييد. شما به آساني مي توانيد دو شخص با يك نام پيدا نماييد.

اگر شما در حال حاضر هيچ ذهنيتي در خصوص مشخصه منحصر به فرد يك جدول نداريد، شما مي توانيد يك فيلد عددي به جدول اضافه نماييد و نوع آن را طوري انتخاب نمايد كه بصورت اتوماتيك با شماره هاي متناوب پر شود. براي انجام اينكار در بانك SQL Server يك فيلد مثلا با عنوان Code ايجاد و نوع آن را Int يا Numeric قرارداد و در قسمت مشخصات فيلد مقدار Identity را برابر Yes قرار دهيد تا خود SQL Server عمليات شماره گذاري اتوماتيك ركوردهاي جديد را انجام دهيد. در بانك اكسس نيز مي توانيد نوع فيلد را Auto Number قرار دهيد.

هنگام انتخاب فيلدهاي كليد اصلي موارد ذيل را در نظر داشته باشيد :

  • بانك هاي اطلاعاتي اجازه ورود مقادير تكراري و همچنين عدم ورود مقدار(Null Value) را در فيلد كليد اصلي نمي دهند. يعني فيلد يا فيلدهايي كه به عنوان كليد اصلي معرفي مي شوند مي بايد حتما مقدار داشته و علاوه بر آن مقدار آن منحصر به فرد باشد.
  • شما ممكن است از كليد اصلي جهت جستجوي اطلاعات استفاده مايد لذا نبايد به گونه اي باشد كه طولاني بوده و يا آن را فراموش نماييد.گاهي لازم است آن را به تعداد مشخصي از حروف يا اعداد و يا به محدوده مشخصي محدود نماييد.
  • اندازه كليد اصلي بر سرعت عمليات در بانك اطلاعاتي شما تاثير خواهد داشت.در هنگام ايجاد فيلدهاي كليد اصلي ، شما مي توانيد مشخصاتي را جهت محدوديت اندازه آن تنظيم نماييد. براي حداكثر كارايي ، كوچكترين اندازه ممكن كه مقادير مورد نظر شما را پوشش مي دهد را انتخاب نماييد.

مثال : تعيين كليد اصلي جدول محصولات : كليد اصلي جدول محصولات شماره شناسايي محصول مي باشد زيرا هر شماره محصول بيانگر يك محصول متفاوت بوده و شما هيچ دو محصولي با شماره يكسان نداريد.

در بعضي از موارد شما ممكن است نياز به تعيين بيش از يك فيلد به عنوان كليد اصلي داشته باشيد زيرا هيچ فيلدي به تنهايي منحصر به فرد نمي باشد براي مثال در جدول جزييات سفارش (Order Details) از دو فيلد به عنوان كليد اصلي استفاده شده است : شماره سفارش (Order ID) و شمار محصول‌ (Product ID)

در مرحله بعد شما علت اين انتخاب را خواهيد فهميد.

 

 

 

خوب دوستان اينم از اين قسمت – در قسمت بعد مطالب مرتبط با تشخيص و تعيين ارتباطات بين جدول را با هم مرور مي كنيم.

اميدوارم از اين مطالب استفاده كنيد و براتون مفيد باشه لطفا نظرات اصلاحي و تكميلي خودتون رو در قسمت نظرات بگيد

و من ا... التوفيق – مدير سايت