PDA

View Full Version : سوال: رابطه موجودیت و بانک اطلاعاتی



grobech
یک شنبه 17 دی 1391, 22:50 عصر
سلام بر همه
آقا اگر ما در بانک اطلاعاتی سه جدول داشتیم 1-جدول مطلب 2-جدول نظرات مطلب 3-جدول کاربران
که هر مطلب توسط یک کاربر ایجاد میشود و هر مطلب نظرات خاص خودش را دارد که کاربران دیگر ارسال میکنند.
حالا اگر بخواهیم سیستم را به صورت شی گرایی طراحی کنیم با موجودیت نظرات چگونه برخورد میشود؟
زیر مجموعه مطالب قرار میگیرد یا موجودیتی جدا میباشد؟
اگر اگر زیر مجموعه مطالب هست پس چگونه لیستی از کلیه نظرات داشته باشیم؟
اگر اگر زیر مجموعه مطالب هست باید برای ساخت موجودیت مطلب همه نظرات آن هم ایجاد شود؟
شرمنده یکم طولانی شد

zarrinnegar
یک شنبه 17 دی 1391, 22:54 عصر
ببینم نظرات هر مطلب رو میخوای یا نظرات هر کاربر رو و یا مطالب هر کاربر رو و یا نظراتی که برای هر کاربر داده شده رو؟

plus
یک شنبه 17 دی 1391, 23:26 عصر
سلام بر همه
آقا اگر ما در بانک اطلاعاتی سه جدول داشتیم 1-جدول مطلب 2-جدول نظرات مطلب 3-جدول کاربران
که هر مطلب توسط یک کاربر ایجاد میشود و هر مطلب نظرات خاص خودش را دارد که کاربران دیگر ارسال میکنند.
حالا اگر بخواهیم سیستم را به صورت شی گرایی طراحی کنیم با موجودیت نظرات چگونه برخورد میشود؟
زیر مجموعه مطالب قرار میگیرد یا موجودیتی جدا میباشد؟
اگر اگر زیر مجموعه مطالب هست پس چگونه لیستی از کلیه نظرات داشته باشیم؟
اگر اگر زیر مجموعه مطالب هست باید برای ساخت موجودیت مطلب همه نظرات آن هم ایجاد شود؟
شرمنده یکم طولانی شد

میتونه زیر مجموعه مطالب باشه و یک فیلد (از دید کلاس) اضافه از نوع مطلب داشته باشه، که مطلبی که بهش مربوط هست رو مشخص کنه.
حالا برای تطبیق این موضوع در دیتابیس.اگه بخواین دیتابیس رو تغییر بدین، بر اساس این طرح، جدول نظرات مطلب حذف میشه، و یک کلید خارجی در جدول مطالب به خود جدول مطالب زده میشه که Nullable هم هست.اگه این فیلد برای یک رکورد NULL باشه، یعنی اون رکودر یک مطلب هست نه نظر، اگه NULL نباشه یعنی رکورد نظر هست و این کلید به مطلب مربوطه اشاره میکنه.
البته این طراحی در صورتیه که مطلب و نظر تفاوتی از نظر سایر فیلد ها نداشته باشن.

grobech
یک شنبه 17 دی 1391, 23:59 عصر
متشکرم بابت جواب
شما فرمودید که زیر مجموعه مطلب قرار میگیرد و نیازی به موجودیت جدا نیست پس :
اگر لیستی از تمامیه نظرات بخواهیم باید از کدام شی گرفته شود؟

plus
دوشنبه 18 دی 1391, 00:32 صبح
لیستی از تمانی نظرات میشود لیستی از تمامی مطالب که فیلد "مطلب مربوطه" آنها null هست.چه سمت دیتابیس چه سمت Client. مثلا


SELECT * FROM Posts WHERE RelatedPostId = NULL

grobech
دوشنبه 18 دی 1391, 23:15 عصر
متشکرم بخاطر توجه
ولی دوست من اگر ما سه جدول داشته باشیم چی؟
متشکر میشم اگر بقیه دوستان هم ما رو راهنمایی کنند

plus
دوشنبه 18 دی 1391, 23:40 عصر
در صورتی که سه جدول داشته باشید لینک خارجی از جدول نظرات به جدول مطالب داریم.

grobech
سه شنبه 19 دی 1391, 16:54 عصر
اینو میدونم دوست من سوال من در رابطه با بانک اطلاعاتی نیست
اگر ما بانک اطلاعاتی رو داشتیم و حالا خواستیم شی های سیستم خودمون طراحی کنیم یک شی به نام مطلب داریم یک شی دیگه به نام کاربر و شی دیگه ای به نام نظر که هر مطلب یه سری نظر داره


public class user{
public int UserID { get; set; }
public string Username { get; set; }
}

public class Post {
public int PostID { get; set; }
public string title { get; set; }
public string Content { get; set; }
public List<Idea> IdeaContent { get; set; }
}

public class Idea{
public string IdeaText { get; set; }
public DateTime DateSubmit { get; set; }
public int UserID { get; set; }
}




حالا سوال من اینه
گر اگر زیر مجموعه مطالب هست پس چگونه لیستی از کلیه نظرات داشته باشیم؟
اگر اگر زیر مجموعه مطالب هست باید برای ساخت موجودیت مطلب همه نظرات آن هم ایجاد شود؟

plus
سه شنبه 19 دی 1391, 18:38 عصر
اینکه چطوری لیستی از همه نظرات داشته باشیم بستگی به نحوه آوردن اطلاعات از دیتابیس به اشیا داره.اگه شما همه Post ها رو لود کنید، و به ازای لود هر Post، نظرات اون رو هم لود کنید (این هم بستگی به نیاز و طراحی داره)، با یک حلقه for روی همه پست ها میتونید همه نظرات رو در بیارین:


List<Post> posts = new List<Post>();
// Retrieve posts from database...
// ..
foreach (Post post in posts)
{
foreach (Idea idea in post.IdeaContent)
{
Console.WriteLine(idea.IdeaText);
}
}

البته با استفاد از LINQ هم میشد یه چنین Query گرفت...
بایدی وجود نداره بستگی به طراحی و نیاز شما داره البته به این نکته هم توجه کنید که لود کردن همه اطلاعات از دیتابیس به نرم افزار میتونه حافظه زیادی مصرف کنه...روش های دیگه ای میشه بکار برد...مثلا میشه با یک مکانیزمی، هربار که به نظرات یک Post نیاز هست، به دیتابیس وصل شد و نظرات اون رو دریافت کرد و مشخصه IdeaContent رو مقدار داد..در این حالت، واسه دریافت همه نظرات هم میشه مثلا یک متد Static برای کلاس Idea نوشت که به دیتابیس وصل بشه و همه نظرات رو بگیره و یک لیست از کلاس Idea برگردونه...