برگزیده های پرشین تولز

سوال در مورد کلاسها و روابط بینشون

resident

Registered User
تاریخ عضویت
5 دسامبر 2005
نوشته‌ها
96
لایک‌ها
2
سلام.بچه ها من چند تا سوال در مورد کلاسها و روابط بینشون دارم.

سوال اول:

این روابطی که بین کلاسها برقرار کردم، درسته (فایلشو گذاشتم)؟

رابطه بین کلاسهای بخش و واحد Whole_Part است.یعنی نمونه های کلاس بخش تشکیل دهنده نمونه های کلاس واحد است(هرواحد ، شامل n بخش است)

چه نامی برای کلاسهای سمت/واحد و پرسنل/ سمت /واحد بذارم؟

نباید به جای رابطه بین سمت و واحد بین سمت و بخش رابطه برقرار کنم؟
classes & Relationships.JPG


سوال دوم:

بچه ها اگه یه فرمی باشه که مشخصات یه طرحی(کد طرح- نام طرح – نوع زمینه و ...) در اون ثبت شده باشه و به جز اون مشخصات فرم ، دو فیلد کد فرم و تاریخ هم داشته باشه این 2 تا کلاسه یا 1 کلاس؟
خود طرح که 1 کلاسه، از طرفی هم خود فرم 1 کلاسه ، ولی چیزی که هست رابطه بین این دو کلاس 1:1 است. نمیدونم این 2 کلاس رو ادغام کنم و 1 کلاس بگیرم یا نه. اگه ادغام کنم اونوقت کلید اصلی کلاس رو کد فرم بگیرم یا کد طرح؟



ممنون میشم راهنماییم کنید.
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
در مورد سوال اول :
بستگی به تعریف موجودیت ها در سناریوی شما داره .
سمت برای واحد تعریف می شه یا برای بخش ؟ به عبارت دیگه کسی که دارای یک سمت هست اون فرد در یک بخش خاص سمت رو داره و یا در یک واحد ؟ اگر در واحد سمت داره پس لازمه کلاس سمت/واحد نعریف کنی و اگر در بخش سمتی داره باید کلاس سمت/بخش رو تعریف کنی . اما مساله مهم اینه که نباید کلید کلاس بخش و واحد رو تواما در کلاس سمت/بخش و یا سمت/واحد استفاده کنی . در واقع اشتباه طراحی شما همین جاست . چون Cyclic Reference ایجاد شده .
اگه واضح نبود بگید تا بیشتر توضیح بدم
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
در مورد سوال دوم :
از اونجایی که می گید رابطه دو کلاس یک به یک هست در تئوری گفته میشه بهتره دو کلاس رو یکی بگیری . اما در عمل یکم متفاوت هست . در واقع گاهی پیش میاد که کلاس اول مثلا 20 تا فیلد داره و کلاس دوم هم 15 تا فیلد داره . ادغام کردن دو کلاس باعث می شه 35 فیلد ایجاد بشه و شما میای حساب می کنی می بینی در 70 درصد مواقع شما فقط 20 فیلد اولیه کلاس اول رو در بسیاری از کدهای پروژه ات فراخوانی می کنی . و فقط در 20 درصد از مواقع 15 فیلد کلاس دوم رو فراخوانی می کنی و نهایتا در 10 درصد مواقع هر 35 فیلد رو می خوای . پس منطقی نیست همیشه این 35 فیلد رو در درخواست هایی که از کلاست داری حمل کنی . بهتره بیاید همون دو کلاس مجزا رو بگیری . حالا سوال پیش میاد که کلید کلاس رابط بین این دو کلاس روچطور تعریف کنم . تجربه نشون داده بهتره همیشه روابط یک به یک رو با تعریف یک کلاس رابط به دو تا رابطه یک به چند تبدیل کنیم
class1 1_______________n Class1/Class2 n________________1 Class2
برای تعریف کلید در کلاس رابط هم یه فیلد جدید می گیریم و اون رو کلید تعریف می کنیم

امیدوارم گیج نشده باشی ;)
 

resident

Registered User
تاریخ عضویت
5 دسامبر 2005
نوشته‌ها
96
لایک‌ها
2
Amin-lili جان از راهنماییهای خوبت ممنون.
در مورد سوال اول شما درست می فرمایید .
حالا سوال پیش میاد که کلید کلاس رابط بین این دو کلاس روچطور تعریف کنم . تجربه نشون داده بهتره همیشه روابط یک به یک رو با تعریف یک کلاس رابط به دو تا رابطه یک به چند تبدیل کنیم
class1 1_______________n Class1/Class2 n________________1 Class2
برای تعریف کلید در کلاس رابط هم یه فیلد جدید می گیریم و اون رو کلید تعریف می کنیم

در مورد سوال دوم هم با توضیحاتتون موافقم اما با اون قسمتی که رابطه 1:1 رو به 2 رابطه n:1 شکستید موافق نیستم. در صورتی میشه این کار رو کرد که رابطه n:n داشته باشیم. در مورد روابط یک به یک باید کلید اصلی یکی از کلاسها رو در کلاس دیگری قرار بدیم.
و اما اون سوالم بی جواب موند که اساساً باید اونا رو 2 تا کلاس بگیرم یا 1 کلاس؟
 

amin_lili

کاربر تازه وارد
تاریخ عضویت
24 آپریل 2007
نوشته‌ها
532
لایک‌ها
2
سن
43
محل سکونت
ای کاش آنجا ...
من عرض کردم خدمتتون که در تئوری مطلب شما صحیح هست اما در عمل میایم 1 به 1 ها رو به دو رابطه 1به n تبدیل می کنیم . دلیل فتی مساله رو هم براتون توضیح دادم . این چیزی که براتون میگم صرفا از روی تجربه کد نویسی هست . چون ما در قوانین جامعیت و همین طور در قوانین نرمال سازی به حجم دیتای رد و بدل شده و سادگی و سختی query های نوشته شده هیچ وقت کار نداریم . اما وقتی وارد فاز اجرایی می شیم متوجه این مشکلات می شیم .
 

H_R

مدیر بازنشسته
تاریخ عضویت
30 مارس 2005
نوشته‌ها
3,298
لایک‌ها
17
سن
42
محل سکونت
North Pole
از دوستان خواهش میکنم به جز مطالبی که مستقیما مربوط به دستور زبان #C میشود در اینجا پست دیگری نزنند !

ممنونم .

پست به انجمن عمومی دات نت منتقل شد !
 
بالا