نرمالسازی دیتابیس چیست؟
فرایند سازماندهی جدولهای دیتابیس برای حذف تکرار داده و جلوگیری از ناسازگاری (Anomaly) هنگام درج، بهروزرسانی یا حذف.
چرا مهم است؟
بدون نرمالسازی، یک داده تکراری در چند ردیف ذخیره میشود؛ بهروزرسانی ناقص یکی از آنها باعث ناسازگاری داده میشود که پیدا کردنش بعداً بسیار سخت است.
تعریف
نرمالسازی یعنی شکستن یک جدول بزرگ و تکراری به چند جدول کوچکتر و مرتبط، طوری که هر داده فقط در یکجا ذخیره شود.
فرمهای نرمال رایج
- 1NF: هر ستون فقط یک مقدار اتمی دارد (نه لیست داخل یک سلول).
- 2NF: هر ستون غیرکلیدی کاملاً به کل کلید اصلی وابسته است (نه بخشی از آن).
- 3NF: هیچ ستون غیرکلیدی به ستون غیرکلیدی دیگر وابسته نیست، فقط به کلید اصلی.
مثال قبل و بعد از نرمالسازی
-- قبل: نام مشتری در هر سفارش تکرار میشود
Orders(OrderId, CustomerName, CustomerEmail, Product, Price)
-- بعد: مشتری فقط یکبار ذخیره میشود
Customers(CustomerId, Name, Email)
Orders(OrderId, CustomerId, Product, Price)
کِی از نرمالسازی عبور کنیم (Denormalization)؟
در سیستمهای با خواندن بسیار سنگین و کمتحمل نسبت به Overhead JOIN (مثل گزارشگیری Real-Time)، گاهی عمداً کمی تکرار داده پذیرفته میشود تا سرعت خواندن بالاتر برود — این تصمیم آگاهانه است، نه فراموشی نرمالسازی.
اشتباه رایج
❌ نرمالسازی افراطی (بیش از 3NF) در برنامههای معمولی — تعداد JOIN لازم برای یک Query ساده آنقدر بالا میرود که هم کد و هم کارایی آسیب میبیند.
منبع و مطالعه بیشتر
خلاصه
نرمالسازی داده تکراری را با شکستن جدول بزرگ به چند جدول مرتبط حذف میکند و از ناسازگاری جلوگیری میکند. 3NF معمولاً برای اکثر برنامهها کافی است؛ Denormalization فقط آگاهانه و برای کارایی خواندن سنگین انجام شود. مرجع کامل: Microsoft Learn و GeeksforGeeks.
