View Full Version : فایده نرمالسازی
ashkufaraz
جمعه 28 آذر 1393, 21:28 عصر
سلام دوستان
فرض کنید یه جدول داریم با 160 فیلد
که می تونیم با نرمالسازی اون را مثلا به 10 جدول 16 فیلدی تقیسیم کنیم
حالا ما میخواییم 100 تا فیلد از اون 160 فیلد را انتخاب کنیم
برای اینکار ما باید 8جدول را با هم join کنیم در حالی که اگر نرمالسازی انجام ندیم می تونیم با یک select اطلاعات 100 فیلد را بگیریم
حالا سوال من اینکه نرمالسازی چه فایده ای داره؟
کاهش افزونگی؟چطور افزونگی داریم در حالی که فیلدهای خالی null ذخیره می شوند؟
البته یکپارچگی را قبول دارم ولی بهتره که یکپارچگی را فدای سرعت کنیم یا برعکس؟
مهدی نان شکری
سه شنبه 09 دی 1393, 14:14 عصر
فواید نرمال سازی:
1) حذف داده های تکراری
وجود داده های تکراری، پایگاه داده را در بروز خطا مستعد می سازد.
به عنوان مثال جدول نرمال نشده ای که داده های سفارشات خرید مربوط به مشتریان را نگهداری می کند را در نظر بگیرید.
شما می خواهید نام شخصی را از مهدی به محمد تغییر دهید. برای این کار اگر کاربر اشتباه کرده و تمام رکورد های فروش مرتبط با مهدی را آپدیت نکند، شما دو مشتری با نام های مهدی و محمد خواهید داشت. که به این حالت modification anomaly گفته می شود.
در چنین شرایطی برای جلوگیری از anomaly ها نیاز به کد نویسی به صورت sp و یا trigger خواهید بود. حجم کدهای زیاد خود مستعد بروز باگ در نرم افزار می باشد.
2) کوچک سازی جداول
با نرمال سازی، معمولا تعداد جداول زیاد و ستون های موجود در آن ها کم می شود. کم شدن تعداد فیلد به معنای کم تر شدن فضای مورد نیاز برای نگهداری هر رکورد می باشد. برای این که واحد پردازش در RDBMS ، Page می باشد و ظرفیت آن در MS SQL Server هشت کیلوبایت می باشد لذا با کمتر شدن حجم یک رکورد میتوان تعداد رکورد بیشتری را در هر Page نگهداری کرد که خود باعث کاهش هزینه IO در پایگاه داده خواهد شد. همچنین Page های منتقل شده به حافظه رم شامل تعداد بیشتری رکورد موثرخواهند بود که این خود هزینه اجرای کوئری ها را کاهش می دهد.
3) تعداد ایندکس کم برای هر جدول
همان طوری که در مورد بالا اشاره شد، با نرمال سازی، تعداد جداول زیاد می شود. در نتیجه تعداد ایندکس ها به ازای هر جدول کاهش پیدا می کند. در نتیجه هزینه نگهداری آن به ازای هر Insert و Update و Delete کاهش می یابد.
در بسیاری از موارد بعضی از اساتید معتقدند با افزایش تعداد جداول در یک پایگاه داده به علت افزایش تعداد Join های مورد نیاز Performance پایگاه داده کاهش می یابد. این جمله تا حدودی صحیح می باشد ولی باید به چند نکته دقت کرد:
جدول نرمال نشده ای که در بالا در مورد سفارشات مطرح شد را در نظر بگیرید. برای آپدیت اسم مشتری کلیه اطلاعات که شامل اطلاعات سفارشات هم می شود قفل Lock خواهند شد. لذا پایگاه داده در اکثر موارد حالت چند کاربری را از دست می دهد.
بر اساس مباحث مطرح شده می بایست حالت میانی انتخاب شود. به همان اندازه که Overnormalization سبب افزایش پیچیدگی طراحی و افزایش Join و عدم امکان Partition بندی صحیح می شود عدم نرمال سازی مناسب هم ممکن است مشکلات متعددی ایجاد نماید. معمولا حالت میانی در مستندات مختلف 3NF مطرح شده است ولی بر اساس Business مورد نظر قابل تغییر می باشد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.