نرمال سازی (قسمت سوم: Third Normal Form)
نویسنده: محمد سلیم آبادی
تاریخ: ۱۳۹۱/۱۱/۱۳ ۲۱:۴۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
در این نمودار واضح است که وابستگی خصیصه نوع رشته به کد دانشجو از طریق خصیصه نام رشته بدست میآید. همینطور برای خصیصه "تعداد واحد". پس دو خصیصهی نوع رشته و تعداد واحد با واسطه به کد دانشجو مرتبط هستند.
پس با تجزیه این نمودار به صورت زیر شرط شکل سوم نرمال هم محقق خواهد شد:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Student
{
public int Id { set; get; }
public string Name { set; get; }
//هر دانشجو چند ترم در دانشگاه خواهد بود
public virtual ICollection<Semester> Semesters { set; get; }
//هر دانشجو چندین واحد دارد
public virtual ICollection<Unit> Units { set; get; }
}
public class Semester
{
public int Id { set; get; }
public string Name { set; get; }
public int Average { set; get; }
[ForeignKey("StudentId")]
public virtual Student Student { set; get; }
public int StudentId { set; get; }
}
public class Unit
{
public int Id { set; get; }
public string Name { set; get; }
public string UnitType { set; get; }
public int NumberOfUnits { set; get; }
[ForeignKey("StudentId")]
public virtual Student Student { set; get; }
public int StudentId { set; get; }
}
یک نکتهای رو چند وقت قبل حین کار با ef بهش برخوردم که جالب بود. از دید ef ، کلیدخارجی یا کلید اصلی «فقط خواندنی» هستند. یعنی اگر در اینجا کسی بخواد نام رشته رو تغییر بده مشکل ساز خواهد شد.
به دو دلیل:
- استفاده از رشتهها نسبت به یک عدد چون طولانیتر هستند کندتر است برای حالت تعریف کلید
- اگر تغییری قرار است رخ دهد، باید به تمام جداول اعمال شود. (تعریف اطلاعات تکراری)