View Full Version : نرمال سازی
Developer Programmer
جمعه 07 مرداد 1384, 21:51 عصر
فرض کنید در حال طراحی دیتابیس واسه یه مغازه ای مثل ویدیو کلوپ یا رستوران هستیم - یه جایی که هم میتونه مشترک داشته باشد و هم نداشته باشه -
از نظر نرمال سازی و از نقطه نظر Perfomance ... آیا یه جدول برای فعالیت مشترکین و یک جدول دیگر برای فعالیت غیرمشترکین(یعنی دوجدول مجزا از هم) درنظر بگیریم بهتره ... یا اینکه در یک جدول (به فرض در جدول ثبت امانات در ویدوکلوپ) هم فیلدهای اعضای مشترک(مثل کد مشترک) و هم فیلدهای غیرمشترک(مثل نام و آدرس و ...) باشه ؟
AminSobati
شنبه 08 مرداد 1384, 00:34 صبح
افشین جان،
اگر اطلاعات فعالیت مشترکین و غیر مشترکین با یکی دو فیلداضافی که در نظر میگیرین، قابل تمایز باشه، بهتره که همگی در یک جدول قرار بگیرند. چون انعطاف پذیری بیشتری در نوشتن Query خواهید داشت.
ولی اگر از نظر ساختار اطلاعات این دو دسته با هم خیلی متفاوت هستند، داشتن دو جدول تنها راه حله.
Developer Programmer
شنبه 08 مرداد 1384, 10:09 صبح
امین جان دوست عزیزم
در جدول امانات فیلد کد مشترک میاد ولی اگه مشترک نباشه عین فیلدهایی که واسه معرفی مشترک در جدول مشترکین بوده ایجاد میشه(نام آدرس تلفن و ...)
به این فکر میکنم که اگه کد مشترک در امانات نوشته بشه ... فیلدهای غیرمشترکین خالی میمونه و یه جوری فضای هرز ایجاد میکنه ... اما در عین حال طبق گفته شما Query نوشتنش راحته
AminSobati
شنبه 08 مرداد 1384, 22:25 عصر
فکر میکنم دو روش در پیش روی شماست(شاید بهش رسیدین خودتون):
یکی اینکه اطلاعات غیر مشترکین رو در جدول امانات نگهداری کنین و برای مشترکین جدول جدا داشته باشین. در این حالت یک ID در جدول امانات وجود داره که اگر Null باشه یعنی این رکورد برای یکی از غیر مشترکین ثبت شده، در غیر اینصورت نشاندهنده کد یکی از مشترکین هست. اشکال این روش اینه که در بسیاری از حالات نیاز دارین تا اطلاعات مشترکین و غیر مشترکین رو Union کنین تا گزارشهای یکپارچه ایجاد کنین.
در روش دیگه، میتونین اطلاعات مشترکین و غیر مشترکین رو در یک جدول قرار بدین و صفر و یک بودن یک فیلد، مشخص کننده وضعیت اون فرد باشه(متمایز کننده). حسنش به اینه که با یک Join اطلاعات افراد رو برای جدول امانات بدست میارین اما در Queryها و ایندکسها باید اون فیلد متمایز کننده رو همیشه مد نظر داشته باشین.
من به شخصه انعطاف پذیری بیشتری در روش دوم میبینم.
Developer Programmer
یک شنبه 09 مرداد 1384, 10:51 صبح
مرسی امین جان
دقیقا مشکلم همین دو راه حل بود که مطرح کردین... باز هم متشکرم
Kamyar.Kimiyabeigi
یک شنبه 09 مرداد 1384, 12:42 عصر
آقای ثباتی عزیز یعنی افزونگی فیلد خیلی بهتر تا افزونگی جدول درسته ؟
AminSobati
یک شنبه 09 مرداد 1384, 15:34 عصر
کامیار جان این عبارت که فرمودین در همه موارد الزاما صدق نمیکنه(به شرایط بستگی داره )
زمانیکه شما نرمالایز میکنین، مرتبا جدول رو به جداول دیگه تقسیم میکنین که این کاملا پذیرفته است. اما بعضا لازمه که Denormalize انجام بشه و افزونگی رو ترجیح میدیم. همونطور که اشاره کردم خیلی به مورد بستگی داره...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.