View Full Version : نرمال سازی
Afshin_Zavar
جمعه 07 مرداد 1384, 11:21 بعد از ظهر
فرض کنید در حال طراحی دیتابیس واسه یه مغازه ای مثل ویدیو کلوپ یا رستوران هستیم - یه جایی که هم میتونه مشترک داشته باشد و هم نداشته باشه -
از نظر نرمال سازی و از نقطه نظر Perfomance ... آیا یه جدول برای فعالیت مشترکین و یک جدول دیگر برای فعالیت غیرمشترکین(یعنی دوجدول مجزا از هم) درنظر بگیریم بهتره ... یا اینکه در یک جدول (به فرض در جدول ثبت امانات در ویدوکلوپ) هم فیلدهای اعضای مشترک(مثل کد مشترک) و هم فیلدهای غیرمشترک(مثل نام و آدرس و ...) باشه ؟
AminSobati
شنبه 08 مرداد 1384, 02:04 قبل از ظهر
افشین جان،
اگر اطلاعات فعالیت مشترکین و غیر مشترکین با یکی دو فیلداضافی که در نظر میگیرین، قابل تمایز باشه، بهتره که همگی در یک جدول قرار بگیرند. چون انعطاف پذیری بیشتری در نوشتن Query خواهید داشت.
ولی اگر از نظر ساختار اطلاعات این دو دسته با هم خیلی متفاوت هستند، داشتن دو جدول تنها راه حله.
Afshin_Zavar
شنبه 08 مرداد 1384, 11:39 قبل از ظهر
امین جان دوست عزیزم
در جدول امانات فیلد کد مشترک میاد ولی اگه مشترک نباشه عین فیلدهایی که واسه معرفی مشترک در جدول مشترکین بوده ایجاد میشه(نام آدرس تلفن و ...)
به این فکر میکنم که اگه کد مشترک در امانات نوشته بشه ... فیلدهای غیرمشترکین خالی میمونه و یه جوری فضای هرز ایجاد میکنه ... اما در عین حال طبق گفته شما Query نوشتنش راحته
AminSobati
شنبه 08 مرداد 1384, 11:55 بعد از ظهر
فکر میکنم دو روش در پیش روی شماست(شاید بهش رسیدین خودتون):
یکی اینکه اطلاعات غیر مشترکین رو در جدول امانات نگهداری کنین و برای مشترکین جدول جدا داشته باشین. در این حالت یک ID در جدول امانات وجود داره که اگر Null باشه یعنی این رکورد برای یکی از غیر مشترکین ثبت شده، در غیر اینصورت نشاندهنده کد یکی از مشترکین هست. اشکال این روش اینه که در بسیاری از حالات نیاز دارین تا اطلاعات مشترکین و غیر مشترکین رو Union کنین تا گزارشهای یکپارچه ایجاد کنین.
در روش دیگه، میتونین اطلاعات مشترکین و غیر مشترکین رو در یک جدول قرار بدین و صفر و یک بودن یک فیلد، مشخص کننده وضعیت اون فرد باشه(متمایز کننده). حسنش به اینه که با یک Join اطلاعات افراد رو برای جدول امانات بدست میارین اما در Queryها و ایندکسها باید اون فیلد متمایز کننده رو همیشه مد نظر داشته باشین.
من به شخصه انعطاف پذیری بیشتری در روش دوم میبینم.
Afshin_Zavar
یک شنبه 09 مرداد 1384, 12:21 بعد از ظهر
مرسی امین جان
دقیقا مشکلم همین دو راه حل بود که مطرح کردین... باز هم متشکرم
Kamyar.Kimiyabeigi
یک شنبه 09 مرداد 1384, 02:12 بعد از ظهر
آقای ثباتی عزیز یعنی افزونگی فیلد خیلی بهتر تا افزونگی جدول درسته ؟
AminSobati
یک شنبه 09 مرداد 1384, 05:04 بعد از ظهر
کامیار جان این عبارت که فرمودین در همه موارد الزاما صدق نمیکنه(به شرایط بستگی داره )
زمانیکه شما نرمالایز میکنین، مرتبا جدول رو به جداول دیگه تقسیم میکنین که این کاملا پذیرفته است. اما بعضا لازمه که Denormalize انجام بشه و افزونگی رو ترجیح میدیم. همونطور که اشاره کردم خیلی به مورد بستگی داره...
این انجمن با استفاده از vBulletin نسخه 3.7.1 کار می کند
تمامی حقوق سیستم این انجمن متعلق به شرکت Jelsoft Enterprises Ltd می باشد.