ورود

View Full Version : روابط یک به یک ( توضیح و بحث )



jaykob
شنبه 26 اردیبهشت 1394, 11:28 صبح
سلام دوستان


من در یک دیتابیس به دلیل استفاده از سیستم Identity 2 در Asp.net MVC مجبور شدم از روابط یک به یک استفاده کنم به صورتی که من یک موجودیت راننده دارم و یک موجودیت کارمندان با فیلد های بسیار زیاد و یک جدول هم دارم که خود Identity داره به نام Users برای پیاده سازی این موضوع اومدم و دو جدول EmployeeInfo , DriverInfo رو طراحی کردم و اطلاعات هر کدام از آنها رو پیاده کردم وی یک رابطه یک به یک با جدول Users دادم ( راه دیگه ای فکر کنم نباشه ) حالا می خوام بیشتر در مورد این شیوه تحلیلی که کردم بدونم و هر کسی نظر و پیشنهادی داره اعلام کنه و این نوع طراحی رو به صورت اصولی به چالش بگشیم تا به راه کار مناسب برسیم .

با تشکر

مهدی نان شکری
شنبه 26 اردیبهشت 1394, 12:19 عصر
با سلام
من از توصیف شما این را برداشت کردم که شما در طراحی خودتان هر کاربر را یا راننده و یا کارمند در نظر گرفته اید. آیا این مطلب درست می باشد؟
حال مشکل کجاست که به دنبال پاسخ هستید؟
با تشکر

jaykob
شنبه 26 اردیبهشت 1394, 12:23 عصر
سلام

بله همینطور هستش . بحث سر اینه که من خوندم که تا می شه روابط یک به یک را نداشته باشیم و فیلد ها را در یک جدول نگه داری کنیم .

می خوام بدونم با توجه به اجباری که من داشتم این رابطه ای که پیاده سازی کردم درست هستش یا نه ؟

برای اینجور موارد چطور باید تحلیل کرد ؟

مهدی نان شکری
شنبه 26 اردیبهشت 1394, 15:39 عصر
با سلام

دوست من همان طور که خودتان بهتر از من می دانید در مستند های طراحی معمولا پیاده سازی رابطه 1:1 غیر متعارف عنوان شده است و راه صحیح پیاده سازی آن ادغام دو جدول با هم می باشد.
ولی کلمه نامتعارف به این معنی نیست که پیاده سازی آن اساس نظام طراحی پایگاه داده را زیر سوال می برد بلکه نحوه پیاده سازی به نوع نگرش شما بستگی دارد.
معمولا از دید مدیران پایگاه داده (DBA) کارایی (Performance) هر پایگاه داده (با رعایت اصول علمی) از ملزومات می باشد .

سناریو های زیر را در نظر داشته باشید:
1) فرض کنید تعداد ستون های یک جدول زیاد می باشد و با توجه به این که واحد پردازش در هر RDBMS ، Page می باشد و فضای هر کدام از آن 8 کیلوبایت است در نتیجه برای افزایش کارایی کوئری های پرکاربرد، ستون هایی که کاربرد زیادی در گزارشات متعارف ندارند جدا سازی می شوند. با این کار معمولا کارایی پایگاه داده بهتر می شود. (البته به هزینه Join برای فیلد های کم کاربرد هم باید توجه داشت)

2) معمولا برای ایجاد امنیت در داده ها، ستون هایی که درجه محرمانگی آن ها بالا می باشند را جدا سازی می کنند (البته راه حل دیگر آن جداسازی با استفاده از ویو می باشد)

3) جدا سازی ستون هایی که تغییرات زیادی بر روی مقادیر آن انجام می شود از ستون های کم تغییر در یک جدول.

از دید طراحی معمولا هدف از پیاده سازی رابطه 1:1، پیاده سازی رابطه "is-a" می باشد. به عنوان مثال فرض کنید شما در سیستم خود احتیاج به نگهداری اطلاعات استاد، کارمند، دانشجو و اشخاص عادی هستید، از لحاظ اصول پیاده سازی شی گرایی همه موجودیت های استاد، دانشجو و کارمند نوعی شخص محسوب می شوند و تمامی فیلد های مربوط به یک شخص را هم دارند ولی هر استاد فیلد های مختص به خود و دانشجو هم فیلد های مختص به خود را خواهد داشت. برای پیاده سازی چنین شرایطی معمولا از رابطه 1:1 استفاده می شود.

در مورد مسذله شما هم موضوع ممکن هست به همین روال باشد (البته من از جزئیات سیستم شما بی اطلاع هستم ولی از لحاظ تئوری روش شما بدون ایراد می باشد).

موفق باشید