نرمالسازی پایگاه داده
نرمالسازی پایگاه داده (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) برای اکثر پایگاههای داده کافی است.
دیدگاه شما