نرمال سازی پایگاه داده چیست؟
مفهوم نرمال سازی پایگاه داده اولین بار توسط Edgar Frank Codd معرفی شد. فرآیند نرمال سازی شامل ایجاد جداول و برقراری ارتباط بین آنها طبق قواعد معین است و روی وابستگیهای ستونهای جدول تمرکز دارد. این فرآیند اغلب باعث ایجاد جداول بیشتر میشود ولی با وجودی که اثر تکرار داده درون پایگاه داده را دارد باعث افزونگی غیر ضروری داده نمیشود. هدف از نرمالسازی تضمین این است که ستونهای غیر کلیدی در هر جدول مستقیماً وابسته به کل کلید باشند و به این ترتیب حذف وابستگیهای ناسازگار، کاهش افزونگی، آنومالی کمتر و بهبود کارائی را نتیجه میدهد.
فرم های نرمال در پایگاه داده
تئوری پایگاه داده درجه نرمال سازی جدول را با اصطلاح فرمهای نرمال (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)
اگر فرم اول نرمال در جدولی مشاهده شود اصطلاحا آنرا در فرم اول نرمال (1NF) مینامند. اگر سه فرم اول نرمال دیده شود آن را در فرم سوم نرمال (3NF) درنظر میگیرند. جدولی که دارای فرم نرمال درجه بالاتر باشد فرمهای نرمال درجه پائینتر را هم دارا میباشد. بنابراین مثلا اگر جدولی 3NF باشد 2NF و 1NF هم هست. ولی عکس این صحت ندارد. توجه داشته باشید که نرمال سازی یک فرآیند تکراری نیست. یک جدول ممکن است در یک مرحله به فرم سوم نرمال دربیاید. بعلاوه اگر 3NF باشد به احتمال بسیار زیاد 5NF هم خواهد بود.
فرم نرمال هریک باعث کاهش بیشتر افزونگی و تقسیم جداول به واحدهای کوچکتر میشوند. سه فرم اول نرمال (1NF، 2NF و 3NF) در ابتدا توسط Codd تعریف شد که به طور خلاصه وابستگی صفات خاصه غیر کلید را به کلید الزام میکنند. فرمهای چهارم و پنجم (4NF و 5NF) با ارتباطات چند به چند و یک به چند بیت صفات خاصه سروکار دارند. دو فرم دیگر هم وجود دارد که کاملا با این جریان جور نمیشوند که BCNF و DK/NF هستند. جهت آشنایی با پایگاه داده و داشتن ارائه در این زمینه به فایل موجود در لینک زیر مراجعه کنید.
نرمال سازی First Normal Form) 1NF)
یک جدول در فرم اول نرمال (1NF) است اگر و فقط اگر فاقد گروه داده تکرار شونده باشد. به عبارت دیگر هر ستون در جدول دارای مقدار اتمیک باشد. در مدل رابطهای هر جدولی حداقل در فرم اول نرمال هست زیرا از الزامات مدل این است که هر جدول شامل دقیقا یک مقدار برای هر صفت خاصه باشد که اصطلاحا “فاقد گروه تکرار شونده” گفته میشود.
نرمال سازی Second Normal Form) 2NF)
یک جدول در فرم دوم نرمال (2NF) است اگر اولا 1NF باشد و ثانیا کلیه ستونهای غیرکلید با کلید اصلی وابستگی تابعی کامل داشته باشند. ستون Y با ستون X در یک رابطه وابستگی تایعی (functional dependency) دارد اگروفقط اگر به ازای هر مقدار در X دقیقا یک مقدار در Y متناظر با آن وجود داشته باشد. که به صورت X→Y نشان داده میشود.
نرمال سازی Third Normal Form) 3NF)
یک جدول در فرم سوم نرمال (3NF) است اگر اولا 2NF باشد، ثانیا کلیه صفات خاصه غیر کلید در جدول با کلید اصلی وابستگی تابعی غیر تعدی داشته باشند. وابستگی تعدی (transitive dependency) یک وابستگی تابعی غیر مستقیم است که در آن X→Z است اگر X→Y و Y→Z باشد.
در فرم سوم نرمال کلیه ستونهای جدول مستقیما توسط کلید اصلی مشخص میشوند. با حذف فیلدهائی که وابستگی مستقیم با کلید ندارند به فرم سوم نرمال میرسیم. برای این کار گروهی از ستونهای جدول را که مقدارشان برای بیش از یک رکورد تکرار میشود را در جدول جداگانهای قرار دهید.
نرمال سازی Forth Normal Form) 4NF)
یک جدول در فرم چهارم نرمال (4NF) است اگر اولا 3NF باشد، ثانیا هیچ ستونی در جدول وابستگی چند مقداری نداشته باشد. وابستگی چندمقداری (multivalued dependency) به این معنی است که حضور رکوردهای معینی در جدول وجود رکوردهای معین دیگری را برساند.
مثال عملی نرمال سازی پایگاه داده
فرض کنید یک فروشگاه رسانههای تصویری یک بانک اطلاعاتی از فیلمهای اجارهای را ذخیره میکند. بدون هرگونه نرمال سازی ، تمام اطلاعات مطابق شکل زیر در یک جدول ذخیره میشوند.
در اینجا میبینید ستون نام فیلم دارای مقادیر مختلفی است.
فرم های نرمال پایگاه داده
حال به فرم نرمال سازی 1NF می رویم.
قوانین فرم نرمال سازی First Normal Form) 1NF)
- هر سلول جدول باید دارای یک مقدار واحد باشد.
- هر رکورد باید منحصر به فرد یا unique باشد.
جدول فوق در 1NF:
مثال 1NF
قبل از هر چیز چند نکته را باید درک کنیم.
کلید چیست؟
کلید یا KEY یک مقدار است که برای شناسایی یک رکورد در یک جدول به صورت منحصر به فرد استفاده میشود. یک کلید میتواند یک ستون یا ترکیبی از ستونهای متعدد باشد.
توجه: ستونهای جدول که برای شناسایی یک رکورد به طور منحصر به فرد استفاده نمیشوند ، ستونهای غیر کلیدی نامیده میشوند.
کلید اصلی یا Primary Key چیست؟
کلید اصلی یک مقدار ستون واحد است که برای شناسایی یک رکورد پایگاه داده به صورت منحصر به فرد استفاده میشود که خصوصیات زیر را دارد:
- یک کلید اصلی نمیتواند NULL یا تهی باشد.
- مقدار اصلی کلید باید منحصر به فرد باشد.
- مقادیر اصلی کلید به ندرت تغییر مییابد.
- با وارد کردن یک رکورد جدید ، به کلید اصلی باید مقداری داده شود.
کلید مرکب یا Composite چیست؟
یک کلید مرکب یا کامپوزیت یک کلید اصلی است که از ستونهای مختلفی تشکیل شده است که برای شناسایی یک رکورد به صورت منحصر به فرد استفاده میشوند.
در بانک اطلاعاتی ما ، دو نفر با نام سحر عبادی داریم ، اما آنها در جاهای مختلف زندگی میکنند.
از این رو ، ما به نام کامل و آدرس نیاز داریم تا یک رکورد را بطور منحصر به فرد شناسایی کنیم. این یک کلید مرکب است.
قوانین نرمال سازی Second Normal Form) 2NF)
- قانون ۱ : در 1NF باشد
- قانون ۲ : کلید اصلی تک ستونی
واضح است که ما نمی توانیم به جلو حرکت کنیم تا بتوانیم بانک اطلاعاتی ساده خود را در فرم نرمال سازی 2NF ایجاد کنیم مگر اینکه جدول فوق را تقسیم کنیم.
جدول 1NF ما به دو جدول تقسیم شده است. جدول ۱ و جدول ۲. جدول ۱ حاوی اطلاعات عضو است. جدول ۲ حاوی اطلاعاتی درباره فیلم های اجارهای است.
ستون جدیدی به نام شماره مشتری را معرفی کردهایم که کلید اصلی جدول ۱ است. سوابق با استفاده از شناسه عضویت میتوانند منحصراً در جدول ۱ مشخص شوند.
کلید خارجی یا Foreign Key چیست؟
در جدول ۲ بالا شماره مشتری یک کلید خارجی است. کلید اصلی خارجی کلید اصلی جدول دیگری را ارجاع میدهد یعنی به اتصال جداول شما کمک میکند.
- یک کلید خارجی میتواند از کلید اصلی خود نام دیگری داشته باشد.
- این اطمینان حاصل میکند که ردیفها در یک جدول دارای سطرهای مربوطه در دیگری هستند.
- بر خلاف کلید Primary، آنها منحصر به فرد نیستند. اما اغلب آنها اینگونه نیستند.
- کلیدهای خارجی می توانند تهی باشند.
قوانین فرم نرمال سازی (3NF (Third Normal Form
- قانون ۱ : در 2NF باشد.
- قانون ۲ : هیچ وابستگی عملکردی انتقالی ندارد.
برای انتقال جدول 2NF ما به 3NF ، باید دوباره جدول خود را تقسیم کنیم.
ما دوباره جداول خود را تقسیم کرده ایم و یک جدول جدید ایجاد کرده ایم که در آن نوع جنسیت ها ذخیره می شود. هیچ وابستگی عملکردی انتقالی وجود ندارد ، و از این رو جدول ما در 3NF است. در جدول ۳ شناسه سلامتی کلید اصلی است ، و در جدول ۱ شناسه سلامتی کلید اصلی اصلی در جدول ۳ است.
اکنون نمونه کوچک ما در سطحی است که بیشتر برای دستیابی به اشکال بالاتر عادی سازی قابل تجزیه نیست. در واقع ، اینک در اشکال نرمال سازی بالاتر قرار دارد. تلاش های جداگانه برای انتقال به سطوح بعدی نرمال سازی داده ها معمولاً در پایگاه های داده پیچیده مورد نیاز است. پاورپوینت ایجاد فرم ورود با PHP توسط مجموعه آموزشی پی استور تهیه و در قالبی آکادمیک طراحی شده که مناسب برای ارائه شما عزیزان میباشد جهت دسترسی به لینک زیر مراجعه کنید.
معایب نرمال سازی
نرمال سازی پایگاه داده تکنیک مهمی برای طراحی پایگاه داده های کارآمد است اما در ضمنی که افزونگی داده را کاهش می دهد سبب کاهش اجرای سیستم می شود. درجات بالای نرمال معمولا جدوال بیشتر را می طلبند. برای پاسخ به پرس و جوها گاهی باید کلیه جداول تقسیم شده دوباره با هم الحاق شوند که در کاربردهائی که زمان پاسخ مهم است (نظیر وب) مطلوب نیست.
بالاترین سطح نرمال سازی با توجه به عملیات کاربردی درنظر گرفته می شود. در پایگاه داده هایی که بیشتر خواندنی هستند و افزونگی داده در آنها مشکل حادی نیست، مانند داده های کاتالوگ یک سایت تجارت الکترونیکی، می توان سطح نرمال سازی را کاهش داد. به این عمل denormalization می گویند. از طرف دیگر در کاربردهایی که درگیر داده های مهم مانند داده های مالی هستند که دائما در حال تغییرند و باید سازگار باقی بمانند، احتمالا سعی می شود به سطوح بالاتر نرمال برسند حتی اگر سرعت پایگاه داده کم شود.
گاهی با توجه به وضعیت ممکن است داده ها از چند پایگاه داده نرمال شده استخراج شوند و در یک انبار داده غیر نرمال قرار گیرد. این روش برای مخزن داده Data warehouse استاندارد خوبی است.
3 پاسخ
دمت گرم
عالی بود
سلام..
مطلب خوبی بود. فقط بهتر بود که یک جدول برای نام فیلم ها در نظر گرفته میشد و به هر فیلم شماره ای تعلق میگرفت، اینگونه در جدول ۲ به جای تکرار نام فیلم که به مرور حجم دیتابیس را افزایش میدهد، شماره فیلم قرار میگرفت.
موفق باشید…