تبلیغات
Information - اطالاعاتی در مورد نرمال سازی پایگاه داده

بازدید : مرتبه
تاریخ : چهارشنبه 31 فروردین 1390

نرمال سازی بانك های اطلاعاتی

نرمال سازی ( 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) است یعنی پس از هر مرحله نرمال سازی که منجر به ایجاد موجودیت های جدید می گردد ، فرآیند را باید از ابتدا تا انتها بر روی موجودیت های تازه ایجاد شده نیز اجرا نمود.




طبقه بندی: مطالب پیشرفته و سطح بالا، 
ارسال توسط Ali sh
آخرین مطالب
آرشیو مطالب
صفحات جانبی
پیوند های روزانه
تبلیغات

قالب وبلاگ

اخبار سینما

خرید پستی

خرید اینترنتی

فروشگاه ستاره