فرم طبیعی سوم (3NF) یک اصل پایگاه داده است که از یکپارچگی داده ها بر اساس اصول نرمال سازی پایگاه داده ارائه شده توسط فرم اول Normal (1NF) و فرم عادی دوم (2NF) پشتیبانی می کند.
الزامات فرم سوم عادی
دو مورد اساسی برای یک پایگاه داده وجود دارد که در فرم سوم سوم قرار می گیرد:
- پایگاه داده باید در حال حاضر نیازهای هر دو 1NF و 2NF را برآورده کند.
- تمام ستون های پایگاه داده باید به کلید اولیه بستگی داشته باشند، به این معنی که هر مقدار ستون می تواند از کلید اولیه تنها حاصل شود.
درباره وابستگی اصلی اولیه
بیایید بیشتر آنچه را که به این واقعیت مربوط است که همه ستون ها به کلید اولیه بستگی دارد، کشف کنیم.
اگر مقدار ستون را می توان از دو کلید اصلی و یک ستون دیگر در جدول استخراج کرد، آن 3NF را نقض می کند. جدول کارمندان با این ستون ها را در نظر بگیرید:
- کارمند
- نام کوچک
- نام خانوادگی
آیا Both LastName و FirstName فقط به ارزش EmployeeID بستگی دارد؟ خوب، می تواند LastName در FirstName بستگی دارد؟ نه، زیرا چیزی که در LastName ذاتی ارزش Name نامیده می شود. آیا Name FirstName به LastName بستگی دارد؟ نه دوباره، چون همان درست است: هر چه نام LastName باشد، نمیتواند اشاره ای به مقدار NameName ارائه دهد. بنابراین، این جدول 3NF سازگار است.
اما این جدول وسایل نقلیه را در نظر بگیرید:
- VehicleID
- سازنده
- مدل
تولید کننده و مدل می تواند از VehicleID حاصل شود - اما مدل همچنین می تواند از تولید کننده حاصل شود، زیرا مدل خودرو تنها توسط یک تولید کننده خاص ساخته شده است. این طراحی جدول غیر قابل انطباق با 3NF است و می تواند منجر به ناهنجاری های داده شود. به عنوان مثال، شما ممکن است سازنده را بدون به روز رسانی مدل، ارائه اشتباهات به روزرسانی کنید.
برای اینکه آن را سازگار کنیم، باید ستون وابسته اضافی را به یک جدول دیگر حرکت دهیم و آن را با استفاده از کلید خارجی ارجاع دهیم. این به دو جدول میرسد:
جدول وسایل نقلیه
در جدول زیر ModelID یک کلید خارجی برای جدول مدل است :
- VehicleID
- سازنده
- ModelID
جدول مدل
این جدول جدید نقشه های مدل را برای تولید کنندگان ارائه می دهد. اگر می خواهید اطلاعات مربوط به وسیله نقلیه مربوط به یک مدل را به روز کنید، می توانید آن را در این جدول انجام دهید، نه در جدول وسایل نقلیه.
- ModelID
- سازنده
- مدل
زمینه های حاصل از مدل 3NF
یک جدول ممکن است حاوی یک فیلد مشتق شده باشد - که بر اساس ستون های دیگر در جدول محاسبه می شود. برای مثال، این جدول از دستورات ویجت را در نظر بگیرید:
- شماره سفارش
- شماره مشتری
- قیمت واحد
- مقدار
- جمع
مجموع تخریب 3NF انطباق، زیرا می توان آن را با ضرب قیمت واحد با مقدار، مگر اینکه به طور کامل وابسته به کلید اولیه مشتق شده است. ما باید آن را از جدول حذف کنیم تا با فرم سوم سوم مطابقت داشته باشد.
در واقع، از آنجا که مشتق شده است، بهتر است که آن را در پایگاه داده ذخیره نکنید.
ما می توانیم به سادگی آن را در پرواز در هنگام انجام درخواست های پایگاه داده محاسبه کنیم. برای مثال، ما ممکن است قبلا از این پرس و جو برای بازیابی اعداد و کل اعداد سفارش استفاده کردیم:
SELECT OrderNumber، Total FROM WidgetOrdersاکنون می توانیم از پرس و جو زیر استفاده کنیم:
SELECT OrderNumber، UnitPrice * مقدار به عنوان مجموع از WidgetOrdersبرای رسیدن به نتایج مشابه بدون نقض قوانین عادی.