نرمال‌سازی دیتابیس و توضیح کامل ۷ لایه آن

نرمال‌سازی (Normalization) فرآیندی است برای سازماندهی جداول دیتابیس رابطه‌ای به منظور کاهش تکرار داده‌ها، جلوگیری از ناهنجاری‌های درج، به‌روزرسانی و حذف، و بهبود یکپارچگی داده‌ها. این فرآیند بر اساس قوانین تدریجی به نام Normal Forms (NF) انجام می‌شود. در این مقاله به‌طور مفصل ۷ لایه نرمال‌سازی (از ۱NF تا ۶NF و DKNF) همراه با مثال‌های عملی توضیح داده شده است.

نرمال سازی دیتابیسNormal FormsDatabase Normalization

~4 min read • Updated Apr 15, 2026

مقدمه

نرمال‌سازی دیتابیس یکی از اصول اساسی طراحی دیتابیس‌های رابطه‌ای است که توسط ادگار اف. کاد معرفی شد. هدف اصلی آن کاهش افزونگی (Redundancy) داده‌ها و حذف ناهنجاری‌های (Anomalies) درج، به‌روزرسانی و حذف است. نرمال‌سازی با اعمال قوانین تدریجی به نام Normal Forms انجام می‌شود. هر فرم بالاتر، شرایط سخت‌گیرانه‌تری دارد و فرم‌های پایین‌تر را نیز شامل می‌شود.

معمولاً در عمل تا 3NF یا BCNF کافی است، اما درک کامل ۷ لایه برای طراحی حرفه‌ای ضروری است.

لایه ۱: First Normal Form (1NF)

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

شرایط:

  • هر ستون فقط یک مقدار داشته باشد
  • هیچ گروه تکراری (Repeating Group) وجود نداشته باشد
  • هر ردیف منحصربه‌فرد باشد (معمولاً با Primary Key)

مثال غیرنرمال:

StudentID | Name | Courses
1         | Ali  | Math, Physics

پس از 1NF:

StudentID | Name | Course
1         | Ali  | Math
1         | Ali  | Physics

لایه ۲: Second Normal Form (2NF)

جدول باید در 1NF باشد و هیچ وابستگی جزئی (Partial Dependency) نداشته باشد. یعنی تمام ستون‌های غیرکلیدی باید به کل Primary Key وابسته باشند (نه فقط بخشی از آن).

مثال: جدول StudentCourse با کلید ترکیبی (StudentID, CourseID) که ستون StudentName فقط به StudentID وابسته است → باید جدا شود.

لایه ۳: Third Normal Form (3NF)

جدول باید در 2NF باشد و هیچ وابستگی گذرا (Transitive Dependency) نداشته باشد. یعنی هیچ ستون غیرکلیدی نباید به ستون غیرکلیدی دیگری وابسته باشد.

مثال: جدول Employee با ستون‌های EmployeeID, Department, DepartmentLocation → DepartmentLocation به Department وابسته است نه مستقیم به EmployeeID.

لایه ۴: Boyce-Codd Normal Form (BCNF)

نسخه قوی‌تری از 3NF است. برای هر وابستگی تابعی X → Y، X باید Super Key باشد.

BCNF تمام وابستگی‌های تابعی را به‌طور کامل پوشش می‌دهد و گاهی 3NF را نقض نمی‌کند اما BCNF قوی‌تر است.

لایه ۵: Fourth Normal Form (4NF)

جدول باید در BCNF باشد و هیچ وابستگی چندمقداری مستقل (Multivalued Dependency) نداشته باشد.

مثال: جدول EmployeeSkills و EmployeeLanguages که دو واقعیت مستقل هستند → باید به جداول جداگانه شکسته شوند.

لایه ۶: Fifth Normal Form (5NF) یا Project-Join Normal Form (PJ/NF)

جدول باید در 4NF باشد و هیچ وابستگی join غیرضروری نداشته باشد. یعنی جدول را نمی‌توان به جداول کوچکتر تجزیه کرد و دوباره با join به حالت اصلی برگرداند بدون از دست دادن اطلاعات.

این فرم برای موارد بسیار پیچیده با وابستگی‌های cyclic استفاده می‌شود.

لایه ۷: Sixth Normal Form (6NF) و Domain-Key Normal Form (DKNF)

6NF: بالاترین فرم نرمال‌سازی که هر جدول فقط یک نوع واقعیت (Fact) را نگه می‌دارد. معمولاً شامل جداول با دو ستون (کلید + یک ویژگی) است. برای داده‌های زمانی و نسخه‌بندی بسیار مفید است.

Domain-Key Normal Form (DKNF): جدول باید به‌گونه‌ای باشد که تمام محدودیت‌ها از Domain Constraints و Key Constraints ناشی شوند. این فرم بیشتر نظری است و به ندرت در عمل اعمال می‌شود.

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

مزایا:

  • کاهش افزونگی داده
  • جلوگیری از ناهنجاری‌های درج، حذف و به‌روزرسانی
  • بهبود یکپارچگی داده

معایب:

  • افزایش تعداد جداول و پیچیدگی joinها
  • کاهش عملکرد در کوئری‌های پیچیده (گاهی نیاز به Denormalization وجود دارد)

نکات عملی

  • در اکثر پروژه‌ها تا 3NF یا BCNF کافی است.
  • برای Data Warehouse و سیستم‌های تحلیلی، Denormalization (کاهش نرمال‌سازی) رایج است.
  • همیشه تعادل بین نرمال‌سازی و عملکرد را در نظر بگیرید.

نتیجه‌گیری

نرمال‌سازی دیتابیس با اعمال ۷ لایه Normal Forms، جداول را به شکل منطقی و بدون افزونگی تبدیل می‌کند. درک عمیق این لایه‌ها به طراحان دیتابیس کمک می‌کند تا پایگاه داده‌ای کارآمد، قابل نگهداری و بدون ناهنجاری طراحی کنند. در عمل، 1NF تا 3NF یا BCNF بیشترین کاربرد را دارند، اما آگاهی از فرم‌های بالاتر (4NF تا 6NF) برای موارد پیچیده ضروری است.

Written & researched by Dr. Shahin Siami