خانه --> مبانی --> فرم های نرمال سازی در پایگاه داده

فرم های نرمال سازی در پایگاه داده

فرم های نرمال

تئوری پایگاه داده درجه نرمالسازی جدول را با اصطلاح فرم های نرمال(normal form) شرح می دهد. فرم های نرمال (یا بطور خلاصه NF) معیاری برای تعیین درجه نرمال جدول دراختیار می گذارد. فرم های نرمال سازی جداگانه روی هر جدول می توانند بکار بروند. پایگاه داده زمانی در فرم نرمال n خواهد بود که کل جداول آن در فرم نرمال n باشند.

فرم های نرمال عبارتند از:

  • First Normal Form (1NF)
    • Second Normal Form (2NF)
    • Third Normal Form (3NF)
    • Forth Normal Form (4NF)
    • Boyce/Codd Normal Form (BCNF)
    • Fifth Normal Form (5NF)
    • Domain/Key Normal Form (DKNF)

اگر فرم اول نرمال در جدولی مشاهده شود اصطلاحا آنرا در فرم اول نرمال (۱NF) می نامند. اگر سه فرم اول نرمال دیده شود آنرا در فرم سوم نرمال (۳NF) درنظر می گیرند. جدولی که دارای فرم نرمال درجه بالاتر باشد فرم های نرمال درجه پائین تر را هم دارا می باشد. بنابراین مثلا اگر جدولی ۳NF باشد ۲NF و ۱NF هم هست. ولی عکس این صحت ندارد.

توجه داشته باشید که نرمالسازی یک فرآیند تکراری نیست. یک جدول ممکن است در یک مرحله به فرم سوم نرمال دربیاید. بعلاوه اگر ۳NF باشد به احتمال بسیار زیاد ۵NF هم خواهد بود.

فرم نرمال هریک باعث کاهش بیشتر افزونگی و تقسیم جداول به واحدهای کوچکتر می شوند. سه فرم اول نرمال (۱NF، ۲NF و ۳NF) در ابتدا توسط Codd تعریف شد که به طور خلاصه وابستگی صفات خاصه غیر کلید را به کلید الزام می کنند. فرم های چهارم و پنجم (۴NF و ۵NF) با ارتباطات چند به چند و یک به چند بیت صفات خاصه سروکار دارند. دو فرم دیگر هم وجود دارد که کاملا با این جریان جور نمی شوند که BCNF و DK/NF هستند.

در برنامه های کاربردی اغلب ۱NF، ۲NF و ۳NF و گاهی ۴NF و ۵NF دیده خواهند شد ۵NF بندرت مشاهده می شود به همین دلیل در اینجا توضیح داده نمی شود.

 

(۱NF) First Normal Form

یک جدول در فرم اول نرمال (۱NF) است اگر و فقط اگر فاقد گروه داده تکرار شونده باشد. به عبارت دیگر هر ستون در جدول دارای مقدار اتمیک باشد.

در مدل رابطه ای هر جدولی حداقل در فرم اول نرمال هست زیرا از الزامات مدل این است که هر جدول شامل دقیقا یک مقدار برای هر صفت خاصه باشد که اصطلاحا “فاقد گروه تکرار شونده” گفته می شود.

 

مثال. جدول ALL_SALES که اطلاعات فروش را نگهداری می کند درنظر بگیرید. این جدول در فرم اول نرمال هست چون هیچ کدام از ستون ها چندمقداری نیستند بنابراین نیازی نیست روی جدول کاری انجام دهیم بجز اینکه یک کلید انتخاب نمائیم. ترکیب غیر تکراری ProductNo+CustomerNo+SaleNo را می توان کلید اصلی درنظر گرفت.

ALL_SALES(SaleNo, ProductNo, CustomerNo, SaleDate, QtyInStock, Description, Price, Customer_Name, Customer_Address, CreditLimit, Amount, Salesrep)

 

(۲NF) Second Normal Form

یک جدول در فرم دوم نرمال (۲NF) است اگر اولا ۱NF باشد و ثانیا کلیه ستون های غیرکلید با کلید اصلی وابستگی تابعی کامل داشته باشند.

ستون Y با ستون X در یک رابطه وابستگی تایعی (functional dependency) دارد اگروفقط اگر به ازای هر مقدار در X دقیقا یک مقدار در Y متناظر با آن وجود داشته باشد. که به صورت X→Y نشان داده می شود.

مثال. در جدول ALL_SALES مثال قبل، Customer_Address با CustomerNo وابستگی تابعی دارد، زیرا یک مشتری خاص تنها با یک آدرس مربوط است. توجه کنید که عکس آن برقرار نیست و چند مشتری ممکن است در یک آدرس زندگی کنند. بنابراین یک آدرس ممکن است با بیش از یک شماره مشتری در ارتباط باشد. اگر مشتری بیش از یک آدرس داشته باشد دیگری وابستگی تابعی با شماره مشتری ندارد.

ستون Y روی مجموعه صفات خاصه X وابستگی تابعی کامل (Full functional dependency) دارد اگر روی X وابستگی تابعی داشته باشد و با هیچ زیرمجموعه ای از X وابستگی تابعی نداشته باشد.

مثال. در جدول ALL_SALES مثال قبل آدرس مشتری وابستگی کامل با SaleNo، ProductNo و CustomerNo دارد ولی وابستگی تابعی کامل ندارد چون با CustomerNo وابستگی تابعی دارد.

توجه کنید اگر کلیدهای کاندید در جدول ترکیبی نباشند یعنی تنها شامل یک ستون باشند بلافاصله می گوئیم جدول ۲NF است.

 

مثال. جدول ALL_SALES را درنظر بگیرید:

ALL_SALES(SaleNo, ProductNo, CustomerNo, SaleDate, QtyInStock, Description, Price, Customer_Name, CreditLimit, Amount, Salesrep)

مشاهده می شود بعضی از ستون ها بهم مرتبط هستند و توسط بخشی از کلید مشخص می شوند. به عبارت دیگر بعضی ستون ها با زیرمجموعه ای از کلید وابستگی تابعی دارند:

ProductNo → {Description, ReorderLevel, Price, QtyInStock}
CustomerNo → {Customer_Name, CreditLimit}
SaleNo → {Date, CustomerNo, ProductNo, Qty, Amount, Salesrep}

با جدا کردن این ستون ها به جداول جداگانه به فرم دوم نرمال می رسیم.

PRODUCT(ProductNo, Description, Price, QtyInStock)
CUSTOMER(CustomerNo, Customer_Name, CreditLimit)
SALE(SaleNo, Date, CustomerNo, ProductNo, Qty, Amount, Salesrep)

 

(۳NF) Third Normal Form

یک جدول در فرم سوم نرمال (۳NF) است اگر اولا ۲NF باشد، ثانیا کلیه صفات خاصه غیر کلید در جدول با کلید اصلی وابستگی تابعی غیر تعدی داشته باشند.

وابستگی تعدی (transitive dependency) یک وابستگی تابعی غیر مستقیم است که در آن X→Z است اگر X→Y و Y→Z باشد.

در فرم سوم نرمال کلیه ستون های جدول مستقیما توسط کلید اصلی مشخص می شوند. با حذف فیلدهائی که وابستگی مستقیم با کلید ندارند به فرم سوم نرمال می رسیم. برای این کار گروهی از ستون های جدول را که مقدارشان برای بیش از یک رکورد تکرار می شود را در جدول جداگانه ای قرار دهید.

 

مثال. فرض کنید جدول PRODUCT به صورت زیر جزئیات تولید کننده هر محصول را دارا باشد:

PRODUCT(ProductNo, Description, ReorderLevel, Price, QtyInStock, SupplierCode, SupplierName, SupplierAddress)

این جدول کلید اصلی تک ستونی دارد بنابراین ۲NF است. اگر تولید کننده چندین محصول را تولید کند فیلدهای SupplierName و SupplierAddress برای هر محصول تکرار می شود زیرا وابستگی تعدی با کلید اصلی دارند.

ProductNo → SupplierCode → {SupplierName, SupplierAddress}

با حذف این ستون ها و تقسیم جدول به صورت زیر به فرم سوم نرمال می رسیم. توجه کنید که SupplierCode در جدول PRODUCT به عنوان کلید خارجی باقی می ماند.

PRODUCT(ProductNo, Description, ReorderLevel, Price, QtyInStock, SupplierCode)
SUPPLIER(SupplierCode, SupplierName, SupplierAddress)

 

رسیدن به فرم سوم نرمال اگرچه مطلوب است ولی همیشه عملی نیست. جداول متعدد باعث تنزل کارائی پرس و جوها می شود. بنابراین ممکن است فرم سوم تنها روی ستون هائی از جدول که زیاد تغییر می کنند اعمال شود و برای فیلدهای وابسته ای باقی مانده برنامه به نحوی طراحی می شود که کاربر ملزم باشد کلیه فیلدهای مرتبط را درهراصلاح بازبینی کند.

(۴NF) Fourth Normal Form

یک جدول در فرم چهارم نرمال (۴NF) است اگر اولا ۳NF باشد، ثانیا هیچ ستونی در جدول وابستگی چند مقداری نداشته باشد.

وابستگی چندمقداری (multivalued dependency) به این معنی است که حضور رکوردهای معینی در جدول وجود رکوردهای معین دیگری را برساند.

 

مثال. اگر مشتریانی با چند آدرس داشته باشیم (که در محیط تجارت عادی است)، در جدول CUSTOMER نمی توانیم چند ستون آدرس را اضافه کنیم چون تعداد آدرس های ممکن را نمی دانیم. بنابراین ناگزیر به اضافه کردن رکورد جدید برای هر آدرس مشتری هستیم که باعث تکرار و افزونگی داده می شود. زیرا CustomerNo دیگر تنها یک آدرس را معین نمی کند بلکه مجموعه ای از آدرس های را نشان می دهد به عبارت دیگر وابستگی چندمقداری دارد. با حذف چنین وابستگی هائی و تقسیم جدول به صورت زیر به فرم چهارم نرمال می رسیم.

CUSTOMER(CustomerNo, First, Last, CreditLimit)
CUSTOMER_ADDRESS(CustomerNo, Address)

حالا هر مشتری می تواند هر تعداد آدرسی را داشته باشد.

 

معایب نرمالسازی

نرمالسازی تکنیک مهمی برای طراحی پایگاه داده های کارآمد است اما در ضمنی که افزونگی داده را کاهش می دهد سبب کاهش اجرای سیستم می شود. درجات بالای نرمال معمولا جدوال بیشتر را می طلبند. برای پاسخ به پرس و جوها گاهی باید کلیه جداول تقسیم شده دوباره با هم الحاق شوند که در کاربردهائی که زمان پاسخ مهم است (نظیر وب) مطلوب نیست.

بالاترین سطح نرمالسازی با توجه به عملیات کاربردی درنظر گرفته می شود. در پایگاه داده هایی که بیشتر خواندنی هستند و افزونگی داده در آنها مشکل حادی نیست، مانند داده های کاتالوگ یک سایت تجارت الکترونیکی، می توان سطح نرمالسازی را کاهش داد. به این عمل denormalization می گویند. از طرف دیگر در کاربردهائی که درگیر داده های مهم مانند داده های مالی هستند که دائما در حال تغییرند و باید سازگار باقی بمانند، احتمالا سعی می شود به سطوح بالاتر نرمال برسند حتی اگر سرعت پایگاه داده کم شود.

گاهی با توجه به وضعیت ممکن است داده ها از چند پایگاه داده نرمال شده استخراج شوند و در یک انبار داده غیر نرمال قرار گیرد. این روش برای مخزن داده Data warehouse استاندارد خوبی است.

http://www.hpkclasses.ir/Courses/DataBase/db0900.html

 

آدرس کانال تلگرام سایت بیگ دیتا:

t.me/bigdata_channel

آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel

جهت دیدن سرفصل های دوره های آموزشی بر روی اینجا کلیک کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *