در بخش قبلی با مفهوم نرمال سازی بانک های اطلاعاتی و وابستگی های تابعی آشنا شدید، در این بخش به بررسی شکل های مختلف نرمال ( سطوح نرمال سازی) می پردازیم.
شکل های نرمال
یک بانک اطلاعاتی از نظر نرمال بودن در یکی از شکل های زیر قرار می گیرند.
1-شکل نرمال اول(1NF)
2-شکل نرمال دوم(2NF)
3-شکل نرمال سوم(3NF)
4-شکل نرمال BC (BCNF)
5-شکل نرمال چهارم(4NF)
6-شکل نرمال پنجم(5NF)
هر بانک اطلاعاتی به شکل نرمال kNF به صورت های نرمال قبل ازk نیز خواهد بود. به عنوان مثال یک بانک اطلاعاتی به شکل نرمال سوم به اشکال نرمال دوم و اول هم خواهد بود.
شکل نرمال اول(1NF)
اولین و ساده ترین سطح نرمال سازی است. اگر جدول بر اساس اصول پایگاه داده رابطه ای ایجاد شود و در هر چند گانه برای هر صفت تنها یک مقدار واحد را ذخیره کند به شکل نرمال اول است.
به عنوان مثال اگر قصد داریم برای یک دانشجو نام استان،نام شهرو آدرس او را جداگانه ثبت کنیم باید برای هر کدام یک ستون مجزا تعریف شود تا بعدا بر اساس هر کدام از این ستون ها به طور جداگانه بتوانیم پرس و جوهای اجرا کنیم.
اگر طراح برای نگهداری استان شهر و آدرس به طور کلی یک ستون تعریف کند بعدا اجرای یک سری از پرس و جوهای وجود نخواهد داشت و جدول ها به شکل نرمال اول نخواهد بود.
مثال 1:جدول غیر نرمال
Address | name | id |
Tehran , Karaj | Ali | 100 |
Khorasan, Birjand | Sara | 100 |
برای نرمال کردن جدول فوق دو ستون مجزا برای نگهداری شهر و استان در نظر می گیریم:
City | state | name | id |
Karaj | Tehran | ali | 100 |
Karaj | Tehran | sara | 100 |
شکل نرمال دوم
یک جدول به شکل نرمال دوم است اگر و فقط اگر به شکل نرمال اول بوده و هر صفت غیر کلیدی آن به صورت کاهش نا پذیر به کلید اصلی وابسته باشد.
مثال 1 :
در جدول ثبت نام داریم:
sabtname )id , name , avgr , code , title , score )
وابستگی های کاهش نا پذیر:
کلید اصلی id , code می باشد.
کلید اصل id وcode است در حالی که نام ومعدل به آن وابستگی کاهش ناپذیر تدارند بلکه به بخشی از آن (id) وابستگی دارند.همچنین title به بخشی از آن (code)وابستگی کاهش ناپذیر دارد. در نتیجه می گوییم جدول به شکل نرمال دوم نیست و به همین خاطر یک سری مشکلاتی برای درج،حذف یا اصلاح داده ها خواهد شد.
Score | title | code | avgr | name | id |
18 | Db | 1 | 18 | Ali | 100 |
17 | Web | 2 | 17 | Reza | 101 |
16 | web | 2 | 18 | Ali | 100 |
اولین مشکل: افزونگی داده هاست یعنی اینکه اطلاعات تکراری مثل نام ومعدل دانشجو و عنوان درس در آن چندین بار تکرار میشود.
مشکل دوم: در هنگام درج پیش می آید این است که امکان ثبت مشخصات دانشجو وجود ندارد مگر اینکه درسی را انتخاب کرده باشد یعنی اینکه ثبت یک واقعیت وابسته شده به ثبت واقعیت دیگری است.
مشکل سوم: هنگام حذف پیش می آید که با حذف انتخاب واحد یک دانشجو مشخصات دانشجو هم حذف می شود.یعنی حذف یک واقعیت(انتخاب درس) واقعیتی دیگری(دانشجو را) حذف می کند.
مشکل چهارم: در هنگام بروز رسانی داده ها پیش می آید که برای تغییر نام یک دانشجو باید تمام سطرهای انتخاب واحد دانشجو تغییر کند یعنی نام دانشجو را در چند سطر تغییر دهیم که این کار هم زمان بر است هم ممکن است ناسازگاری داده هاپیش آید یعنی بعضی سطرها تغییر کند و بعضی تغییر نکند و در نتیجه یک واقعیت به چند شکل ثبت شده باشد.
برای نرمال کردن جدول: باید جدول شکسته شود(به دو یا چند جدول) و این تجزیه باید به صورت بدون نقصان باشد(تجزیه بدون نقصان)یعنی اینکه با الحاق بخش های جدول بتوان جدول اولیه را بدست آورد.
مثال 2 :
در جدول فروش داریم که {bid , cid} کلید اصلی است:
sale( bid , btitle , price , cid , cname , city , qty )
وابستگی های کاهش ناپذیر عبارتند از:
چون bid به تنهایی تعیین کننده {btitle , price}است پس بصورت کاهش ناپذیر به کلید اصلی وابسته نیستند و جدول به شکل دوم نرمال نمی باشد.
برای تبدیل به شکل دوم نرمال، جدول sale را به دو جدول زیر تجزیه می کنیم:
books( bid , btitle , price )
sale2 ( bid , cid , cname , qty)
و چون در جدول sale2 ستون cid به تنهایی نعیین کننده {cname,city}است پس slae2 را به دو جدول زیر تجزیه می کنیم :
customers ( cid , cname , city )
sale3 ( bid , cid , qty)
شکل نرمال سوم
یک رابطه به شکل نرمال سوم است (3NF)اگر و فقط اگر به شکل نرمال دوم بوده و هر صفت غیر کلیدی به صورت غیر متعدی به کلید اصلی وابسته باشد به عبارت دیگر هر دو ستون از جدول به جز کلید اصلی از یکدیگر مستقل باشند.اگر جدولی به شکل نرمال سوم نباشد مشکلات قبلی (4 مشکل) را خواهد داشت.
مثال :جدول اطلعات کتابها و ناشرین آنها را درنظربگیرید:
pid: کد ناشر pname: نام ناشر pcity: شهر ناشر
bid: کد کتاب و کلید اصلی جدول
books( bid , btitle , price , pid , pname , pcity )
وابستگی های کاهش ناپذیر عبارتند از :
چون bid کلید اصلی است در حالی که pname و pcity به ستونی غیر از آن یعنی pid وابسته اند.در نتیجه به شکل نرمال سوم نیست.
برای تبدیل به شکل سوم نرمال، باید آن را به دو جدول زیر تجزیه کنیم:
books( bid , btitle , price , pid )
pubs( pid , pname , pcity )
که جدول books دارای یک کلید خارجی متناظر با کلید اصلی در جدول ناشرین خواهد بود.