جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
نرمال سازي بانك هاي اطلاعاتي
-(0 Body) 
نرمال سازي بانك هاي اطلاعاتي
Visitor 4096
Category: دنياي فن آوري
نرمال سازي ( Normalization ) يا به تعبيري هنجار سازي فرآيندي است در رابطه با بانك هاي اطلاعاتي كه با دو هدف عمده زير انجام مي شود :
• کاهش افزونگي اطلاعات ، به اين معني که اطلاعات فقط در يک مكان (جدول) ذخيره و در تمام بانک با استفاده از روابط منطقي تعريف شده (RelationShip) قابل دسترسي باشد .
• حفظ يکپارچگي اطلاعات ، به اين معني که اعمال تغييرات بر روي اطلاعات ( نظير ايجاد ، بهنگام سازي و حذف ) در يك مكان انجام و به دنبال آن آثار تغييرات در تمام بانك مشاهده گردد . براي روشن شدن مفهوم يکپارچگي بد نيست به مثال ذيل توجه نمائيد :
فرض كنيد در يك بانك اطلاعاتي داراي دو موجوديت كتاب و نويسنده باشيم . هر يك از موجوديت هاي فوق داراي المان هاي اطلاعاتي (Attribute) مختص به خود مي باشند . به عنوان نمونه موجوديت "كتاب" داراي المان اطلاعاتي نام نويسنده و موجوديت "نويسنده " داراي المان هاي اطلاعاتي متعددي نظير نام نويسنده ، آدرس نويسنده و ... باشد . در صورتي كه در موجوديت "کتاب" يک رخداد (رکورد) ايجاد نمائيم بدون اينکه نام نويسنده آن را در موجوديت "نويسنده" ايجاد کرده باشيم ، دچار يک ناهمگوني اطلاعات خواهيم شد .
با توجه به اهداف فوق مي توان گفت كه فرآيند نرمال سازي از ناهنجاري هاي بوجود آمده به دليل بروز تغييرات در بانك جلوگيري خواهد نمود . با اعمال فرآيند نرمال سازي ، يك بانك اطلاعاتي كارآ و مطمئن را خواهيم داشت .
فرآيند نرمال سازي ، فرم هاي متفاوتي دارد كه انواع متداول آن به شرح ذيل است :
• فرم اول نرمال سازي 1NF
• فرم دوم نرمال سازي 2NF
• فرم سوم نرمال سازي 3NF
• فرم بويس کد نرمال سازي BCNF
• فرم چهارم نرمال سازي 4NF

فرم اول نرمال 1NF

موجوديت و يا جدولي در فرم اول نرمال است كه تمامي المان هاي اطلاعاتي آن ( منظور Attribute است ) يكتا و يا اصطلاحا" atomic باشند . براي روشن شدن اين موضوع فرض كنيد داراي موجوديتي با نام "فاكتور فروش " باشيم .

فاكتور فروش

شماره فاکتور(کليد اصلي)
تاريخ فاکتور
کد مشتري
نام مشتري
کالاي 1
تعداد کالاي 1
قيمت واحد کالاي 1
.
.
.
کالاي n
تعداد کالاي n
قيمت واحد کالاي n

با مشاهده موجوديت فوق متوجه اين موضوع خواهيم شد كه المان هاي كالا ، تعداد كالا و قيمت واحد كالا بيش از يك مرتبه در موجوديت وجود داشته و اصطلاحا" يك گروه تكرار را تشكيل مي دهند . براي اجراي مدل فيزيكي اين موجوديت ناچار خواهيم بود در طراحي جدول آرايه اي به طول ثابت ( به عنوان نمونه با ده عضو ) تعريف و در آن به ترتيب كالاي 1 تا 10 را تعريف نمائيم .
مشکل : طراحي فوق ما را با دو مشکل عمده روبرو خواهد ساخت : اول اين كه کارائي بانک اطلاعاتي پائين خواهد آمد (اگر در آينده تعداد کالاهاي فاکتور فروش بيش از 10 کالا باشد ، آنگاه مجبور خواهيم بود طراحي جدول مربوطه و متعاقب آن نرم افزارهائي که از آن استفاده مي كنند را تغيير دهيم ) و مشکل دوم اين كه بسياري از فاکتورها لزوما" داراي 10 کالا نيستند و بنابراين محتوي بسياري از فيلدها در جدول فوق خالي (داراي ارزش Null) خواهد ماند و حجم زيادي از فضاي ديسک هدر خواهد رفت .
راه حل : براي حل اين مشکل کافي است تمامي گروه هاي تکرار و يا آرايه ها را از موجوديت خارج کرده و به موجوديت ديگري منتقل نمائيم . در چنين مواردي ، كليد اصلي موجوديت اول را به عنوان بخشي از كليد اصلي موجوديت جديد قرار داده و با تلفيق يكي ديگر از آيتم هاي اطلاعاتي موجوديت جديد كه تضمين كننده يكتا بودن ركوردهاي آن موجوديت ( جدول ) است ، كليد اصلي موجوديت ايجاد مي گردد . بدين ترتيب ، يك ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلي موجوديت پدر برقرار خواهد شد .
مجددا" به موجوديت "فاكتور فروش " مثال قبل پس از تبديل به فرم اول نرمال توجه نمائيد :

رديف هاي فاكتور فروش



ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلي موجوديت پدر
(فاكتور فروش)

فاكتور فروش

شماره فاکتور(قسمت اول کليد اصلي)
کالا (قسمت دوم کليد اصلي)
تعداد
قيمت واحد
 

شماره فاکتور(کليد اصلي)
تاريخ فاکتور
کد مشتري
نام مشتري

به طور خلاصه مي توان گفت كه هدف از فرم اول نرم سازي حذف گروه هاي تكرار و آرايه ها از موجوديت يا جدول است . فرآيند فوق ، مي بايست بر روي تمامي موجوديت هاي بانك اطلاعاتي اعمال گردد تا بتوان گفت بانك اطلاعاتي نرمال شده در فرم اول است .

فرم دوم نرمال 2NF

موجوديتي در فرم دوم نرمال است که اولا" در فرم اول نرمال باشد و ثانيا" تمامي آيتم هاي (Attribute) غير کليدي آن وابستگي تابعي به تمام کليد اصلي‌ موجوديت داشته باشند نه به بخشي از آن .همانگونه كه از تعريف فوق استنباط مي گردد ، فرم دوم نرمال سازي در خصوص موجوديت هائي بررسي و اعمال مي شود كه داراي كليد اصلي مركب هستند ( بيش از يك جزء ) . بنابراين در مثال فوق موجوديت "فاكتور فروش " به خودي خود در فرم دوم نرمال است ولي موجوديت "رديف هاي فاكتور فروش " كه داراي كليد اصلي مركب است ، نياز به بررسي دارد .
مشکل : در صورتي كه موجوديت در فرم دوم نرمال نباشد ، آنگاه با تغيير اطلاعات قسمت هاي غيروابسته به تمام كليد ، اين تغييرات در يك ركورد اعمال مي شود ولي تاثيري بر روي ساير ركوردها و يا جداول نخواهد داشت . در مثال فوق با تغيير محتوي قيمت واحد در موجوديت "فاكتور فروش " ، قيمت واحد كالا در يك فاكتور فروش اصلاح مي گردد اما در ساير فاكتورها اعمال نخواهد شد .
راه حل : براي حل اين مشکل کافي است موجوديت جديدي ايجاد نمائيم و کليد اصلي آن را برابر با آن بخش از کليد اصلي موجوديت مورد بررسي که داراي المان هاي وابسته به آن است قرار دهيم ، سپس تمام المان هاي اطلاعاتي وابسته تابعي به اين کليد را از موجوديت مورد بررسي خارج کرده و به موجوديت جديد منتقل نمائيم . در اين حالت بين موجوديت جديد ايجاد شده و موجوديت نرمال شده ، بر اساس کليد اصلي موجوديت جديد ايجاد شده يک ارتباط پدر فرزندي تعريف خواهد شد . دقت کنيد که بر عکس نرمال سازي فرم اول ، در اين جا موجوديت موردبررسي فرزند بوده و موجوديت جديد پدر خواهد بود .
به مثال فوق برمي گرديم و فرم دوم نرمال سازي را بر روي آن اعمال مي نمائيم . موجوديت "فاکتور فروش" داراي کليد مرکب نيست پس در فرم دوم نرمال بوده و نياز به بررسي ندارد ، اما موجوديت "رديف هاي فاکتور فروش" نياز به بررسي دارد . در اين موجوديت آيتم اطلاعاتي "قيمت واحد" وابستگي تابعي به آيتم کالا دارد که بخشي از کليد است نه کل کليد ، پس لازم است تا اين موجوديت را تبديل به فرم دوم نرمال نمائيم . بدين منظور موجوديتي به نام "کالا" ايجاد کرده ، کليد اصلي آن را برابر کالا قرار داده و آيتم قيمت واحد را از موجوديت رديف هاي فاکتور فروش خارج نموده و به اين موجوديت منتقل مي نمائيم. مثال فوق پس از تبديل به فرم دوم نرمال به شکل ذيل خواهد بود :

 

رديف هاي فاكتور فروش



ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلي موجوديت پدر (فاكتور فروش)

فاكتور فروش

شماره فاکتور(قسمت اول کليد اصلي)
کالا (قسمت دوم کليد اصلي)
تعداد
 

شماره فاکتور(کليد اصلي)
تاريخ فاکتور
کد مشتري
نام مشتري


ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلي موجوديت پدر (كالا)

 

كالا

کالا (کليد اصلي)
قيمت واحد

فرم سوم نرمال 3NF

موجوديت و يا جدولي در فرم سوم نرمال است که اولا" در فرم دوم نرمال بوده و ثانيا" تمام آيتم هاي غير کليد آن وابستگي تابعي به کليد اصلي داشته باشند ، نه به يک آيتم غير کليد .
مشکل : در صورتي كه موجوديتي در فرم سوم نرمال نباشد ، آنگاه با تغيير آيتم يا آيتم هاي اطلاعاتي غير وابسته به کليد اصلي در يک رکورد، تغييرات در ساير رکوردها اعمال نخواهد شد و دچار دوگانگي اطلاعات خواهيم شد (مثلا" يک مشتري با دو نام متفاوت) .
راه حل : کافي است آيتم هاي غير کليدي به هم وابسته را به موجوديت جديدي منتقل و کليد اصلي موجوديت جديد را تعيين نمائيم ، آنگاه کليد اصلي موجوديت جديد را در موجوديت نرمال شده به عنوان يک کليد خارجي (Foreign Key) در نظر گرفت . در موجوديت "فاکتور فروش" مثال فوق آيتم نام مشتري وابستگي تابعي به آيتم کد مشتري دارد که خود يک آيتم غير کليد است بنابر اين بايد نرمال سازي فرم سوم در خصوص آن اعمال شود . شکل ذيل نحوه انجام اين كار را نشان مي دهد :

رديف هاي فاكتور فروش



ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلي موجوديت پدر (فاكتور فروش)

فاكتور فروش

شماره فاکتور(قسمت اول کليد اصلي)
کالا (قسمت دوم کليد اصلي)
تعداد
 

شماره فاکتور(کليد اصلي)
تاريخ فاکتور
کد مشتري (کليد خارجي)

ارتباط بين موجوديت پدر و فرزند بر اساس كليد اصلي موجوديت پدر (كالا)

ارتباط بين موجوديت پدر
 ( مشتري ) و فرزند بر اساس كليد خارجي 

كالا

مشتري

کالا (کليد اصلي)
قيمت واحد

کدمشتري (کليد اصلي)
نام مشتري

فرم بويس کد نرمال BCNF

فرم بويس کد داراي مفهوم جامع تري نسبت به فرم دوم و سوم نرمال است . در فرم دوم و سوم نرمال بحث بر سر وابستگي تابعي آيتم هاي غير کليدي به کليد اصلي است . اما در فرم بويس کد ، موجوديتي در فرم بويس کد نرمال است که اولا" در فرم اول نرمال بوده و ثانيا" تمام المان هاي غير کليدي آن کاملا" وابسته تابعي به يک کليد باشند و نه چيز ديگر . نکته حائز اهميت در اين فرم اين است که بحث بر سر وابستگي تابعي با يک کليد است نه فقط کليد اصلي. مفهوم فوق در خصوص موجوديت هائي که داراي چندين کليد هستند (Alternate Key) مطرح مي شود .

فرم چهارم نرمال 4NF

اين فرم در خصوص موجوديت هائي است که ارتباط بين المان هاي آن يک ارتباط چند ارزشه و يا چند به چند باشد . به عنوان مثال ، موجوديت کلاس درس مي تواند شامل چندين دانش آموز و چندين معلم باشد. در چنين مواردي ارتباط بين معلم و دانش آموز يک ارتباط چند به چند مي باشد . در اين حالت با ايجاد يك موجوديت رابط مابين موجوديت هاي مذكور، مشکل ارتباط چند به چند حل خواهد شد (بسياري از سيستم هاي مديريت بانک هاي رابطه اي نظير MSSQL از رابطه چند به چند پشتيباني نمي نمايند ، يعني نمي توان بين دو جدول يک رابطه چند به چند ايجاد نمود). معمولا" تمام المان هاي موجوديت رابط ايجاد شده بخشي از كليد اصلي است .

خلاصه

نرمال سازي فرم هاي ديگري نيز دارد که به دليل نادر بودن و خاص بودن آنها در اين مقاله به آنها اشاره نشده است . آنچه در خصوص نرمال سازي عموميت دارد تا فرم سوم آن است ، يعني در هنگام طراحي بانک هاي اطلاعاتي حتما" مي بايست فرآيند نرمال سازي تا فرم سوم را انجام داد .
فرآيند نرمال سازي يک فرآيند تکراري (Recursive) است يعني پس از هر مرحله نرمال سازي که منجر به ايجاد موجوديت هاي جديد مي گردد ، فرآيند را بايد از ابتدا تا انتها بر روي موجوديت هاي تازه ايجاد شده نيز اجرا نمود.
Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image