نرمالسازی پایگاه داده
نرمالسازی پایگاه داده (Database Normalization) فرآیندی است که برای سازماندهی دادهها در یک پایگاه داده رابطهای (Relational Database) به کار میرود. هدف اصلی این فرآیند، کاهش افزونگی دادهها (Data Redundancy)، بهبود یکپارچگی دادهها (Data Integrity) و تسهیل مدیریت و بهروزرسانی دادهها است. نرمالسازی با تجزیه جداول بزرگ به جداول کوچکتر و مرتبطتر انجام میشود و مراحل مختلفی دارد که به آنها «فرمهای نرمال» (Normal Forms) گفته میشود.
مراحل نرمالسازی (Normal Forms)
- فرم اول نرمال (1NF)
- فرم دوم نرمال (2NF)
- فرم سوم نرمال (3NF)
- فرم بوایس-کاد نرمال (BCNF)
- فرم چهارم نرمال (4NF)
- فرم پنجم نرمال (5NF)
در ادامه هر یک از این مراحل را با مثالهای متعدد شرح میدهیم.
1. فرم اول نرمال (1NF)
تعریف: یک جدول در فرم اول نرمال است اگر:
- هر ستون شامل مقادیر اتمیک (غیرقابل تقسیم) باشد.
- هر رکورد در جدول منحصر به فرد باشد (یعنی کلید اصلی داشته باشد).
مثال:
فرض کنید جدولی به نام Students داریم که اطلاعات دانشجویان و دروس آنها را نگهداری میکند:
| StudentID | StudentName | Courses |
|---|---|---|
| 1 | Ali | Math, Physics |
| 2 | Sara | Chemistry |
| 3 | Reza | Biology |
این جدول در فرم اول نرمال نیست، زیرا ستون Courses شامل مقادیر غیراتمیک (چند مقدار در یک سلول) است. برای نرمالسازی، باید این جدول را به صورت زیر تغییر دهیم:
| StudentID | StudentName | Course |
|---|---|---|
| 1 | Ali | Math |
| 1 | Ali | Physics |
| 2 | Sara | Chemistry |
| 3 | Reza | Biology |
اکنون هر سلول حاوی یک مقدار اتمیک است و جدول در فرم اول نرمال قرار دارد.
2. فرم دوم نرمال (2NF)
تعریف: یک جدول در فرم دوم نرمال است اگر:
- در فرم اول نرمال باشد.
- تمامی ستونهای غیرکلیدی به طور کامل به کلید اصلی وابسته باشند (یابستگی تابعی کامل داشته باشند).
مثال:
جدول StudentCourses را در نظر بگیرید:
| StudentID | CourseID | CourseName | Instructor |
|---|---|---|---|
| 1 | 101 | Math | Dr. Smith |
| 1 | 102 | Physics | Dr. Jones |
| 2 | 103 | Chemistry | Dr. Brown |
در این جدول، کلید اصلی ترکیبی از StudentID و CourseID است. اما ستونهای CourseName و Instructor فقط به CourseID وابسته هستند، نه به کلید اصلی ترکیبی. بنابراین، این جدول در فرم دوم نرمال نیست.
برای نرمالسازی، جدول را به دو جدول تقسیم میکنیم:
جدول ۱: StudentCourses
| StudentID | CourseID |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 103 |
جدول ۲: Courses
| CourseID | CourseName | Instructor |
|---|---|---|
| 101 | Math | Dr. Smith |
| 102 | Physics | Dr. Jones |
| 103 | Chemistry | Dr. Brown |
اکنون هر دو جدول در فرم دوم نرمال هستند.
3. فرم سوم نرمال (3NF)
تعریف: یک جدول در فرم سوم نرمال است اگر:
- در فرم دوم نرمال باشد.
- هیچ وابستگی تراگذر (Transitive Dependency) وجود نداشته باشد، یعنی هیچ ستون غیرکلیدی به ستون غیرکلیدی دیگر وابسته نباشد.
مثال:
جدول Students را در نظر بگیرید:
| StudentID | StudentName | Department | DepartmentHead |
|---|---|---|---|
| 1 | Ali | CS | Dr. Smith |
| 2 | Sara | Math | Dr. Jones |
| 3 | Reza | CS | Dr. Smith |
در این جدول، DepartmentHead به Department وابسته است، که خود یک ستون غیرکلیدی است. این یک وابستگی تراگذر است. برای نرمالسازی، جدول را به دو جدول تقسیم میکنیم:
جدول ۱: Students
| StudentID | StudentName | Department |
|---|---|---|
| 1 | Ali | CS |
| 2 | Sara | Math |
| 3 | Reza | CS |
جدول ۲: Departments
| Department | DepartmentHead |
|---|---|
| CS | Dr. Smith |
| Math | Dr. Jones |
اکنون هر دو جدول در فرم سوم نرمال هستند.
4. فرم بوایس-کاد نرمال (BCNF)
تعریف: یک جدول در فرم بوایس-کاد نرمال است اگر:
- در فرم سوم نرمال باشد.
- برای هر وابستگی تابعی (Functional Dependency)، سمت چپ وابستگی باید یک ابرکلید (Superkey) باشد.
مثال:
جدول Enrollments را در نظر بگیرید:
| StudentID | CourseID | Instructor |
|---|---|---|
| 1 | 101 | Dr. Smith |
| 2 | 101 | Dr. Smith |
| 3 | 102 | Dr. Jones |
فرض کنید هر درس فقط توسط یک مربی تدریس میشود، اما یک مربی میتواند چندین درس را تدریس کند. در این حالت، CourseID → Instructor یک وابستگی تابعی است، اما CourseID یک ابرکلید نیست. برای نرمالسازی، جدول را به دو جدول تقسیم میکنیم:
جدول ۱: Enrollments
| StudentID | CourseID |
|---|---|
| 1 | 101 |
| 2 | 101 |
| 3 | 102 |
جدول ۲: CourseInstructors
| CourseID | Instructor |
|---|---|
| 101 | Dr. Smith |
| 102 | Dr. Jones |
اکنون هر دو جدول در فرم بوایس-کاد نرمال هستند.
5. فرم چهارم نرمال (4NF)
تعریف: یک جدول در فرم چهارم نرمال است اگر:
- در فرم بوایس-کاد نرمال باشد.
- هیچ وابستگی چندمقداری (Multivalued Dependency) غیرضروری وجود نداشته باشد.
مثال:
جدول Students را در نظر بگیرید:
| StudentID | CourseID | Hobby |
|---|---|---|
| 1 | 101 | Swimming |
| 1 | 101 | Reading |
| 1 | 102 | Swimming |
| 2 | 101 | Painting |
در این جدول، StudentID →→ CourseID و StudentID →→ Hobby دو وابستگی چندمقداری هستند. برای نرمالسازی، جدول را به دو جدول تقسیم میکنیم:
جدول ۱: StudentCourses
| StudentID | CourseID |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
جدول ۲: StudentHobbies
| StudentID | Hobby |
|---|---|
| 1 | Swimming |
| 1 | Reading |
| 2 | Painting |
اکنون هر دو جدول در فرم چهارم نرمال هستند.
6. فرم پنجم نرمال (5NF)
تعریف: یک جدول در فرم پنجم نرمال است اگر:
- در فرم چهارم نرمال باشد.
- هیچ وابستگی پیوندی (Join Dependency) غیرضروری وجود نداشته باشد.
مثال:
جدول Projects را در نظر بگیرید:
| EmployeeID | ProjectID | SkillID |
|---|---|---|
| 1 | 101 | 201 |
| 1 | 102 | 202 |
| 2 | 101 | 201 |
در این جدول، وابستگیهای پیوندی وجود دارد. برای نرمالسازی، جدول را به سه جدول تقسیم میکنیم:
جدول ۱: EmployeeProjects
| EmployeeID | ProjectID |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
جدول ۲: EmployeeSkills
| EmployeeID | SkillID |
|---|---|
| 1 | 201 |
| 1 | 202 |
| 2 | 201 |
جدول ۳: ProjectSkills
| ProjectID | SkillID |
|---|---|
| 101 | 201 |
| 102 | 202 |
اکنون هر سه جدول در فرم پنجم نرمال هستند.
جمعبندی
نرمالسازی پایگاه داده یک فرآیند گامبهگام است که با هدف کاهش افزونگی دادهها و بهبود یکپارچگی آنها انجام میشود. هر مرحله از نرمالسازی (از 1NF تا 5NF) قوانین خاصی دارد که باید رعایت شود. با این حال، در عمل، معمولاً تا فرم سوم نرمال (3NF) یا فرم بوایس-کاد نرمال (BCNF) برای اکثر پایگاههای داده کافی است.
دیدگاه شما