PDA

View Full Version : نحوه طراحی دیتا بیس با این مشخصات



b.paseban
شنبه 16 بهمن 1389, 13:08 عصر
با عرض سلام خدمت تمامی دوستان برنامه نویس.
من یه صفحه توی سایت دارم که مقاله هارو توی اون میزارم.
دیتا بیس مقاله با فیلدهای زیر:
ArttcleID,AddedDate,Title,Preview,Body,Keyword,Com mentsEnabled,OnlyForMembers,ViewCount

هر مقاله توسط چند نفر نوشته شده.
من اطلاعات مربوط به نویسندگان مقالات رو توی یه دیتا بیس جدا نوشتم با این فیلد ها:

AddedByID,Name,Picture,DateBirthday,Education,Poin t,EmailAddress

حالا من میخوام بدونم چطوری باید این دیتا بیس رو با این مشخصات طراحی کنم طوریکه مثلا اگر
ArttcleID=5 بود AddedByID های مربوطه لود شه مثلا AddedByID=1 و AddedByID=2 و AddedByID=5

stabesh
شنبه 16 بهمن 1389, 14:04 عصر
با سلام
فکر کنم چون یک مقاله چند نویسنده و هر نویسنده هم میتونه چند مقاله داشته باشه پس باید یک جدول داشته باشید
حاوی:
AddedByID و ArttcleID
تا دو جدول رو بشه به هم وصل کرد

b.paseban
شنبه 16 بهمن 1389, 15:28 عصر
اگه راه حل این باشه،
برای دریافت مقادیر مربوط به هر مقاله باید چه select ی بنویسیم؟منظورم به غیر از اطلاعات دیتا بیس مقاله اطلاعات مربوط به نویسندگان اون مقاله هم هست.

stabesh
شنبه 16 بهمن 1389, 15:52 عصر
با یک gridview یا یه چیزی شبیهش میشه اطلاعات نویسندگان رو لیست کرد
کوئریش میتونی join بین سه تا جدول باشه
مشکلتون چیه می خواین فایل اکسس رو بذارم
البته syntax کوئری اکسس یه کم با sql server فرق داره
التبه شاید هم بهتر باشه کمی صبر کنید اساتید جواب بدند چون معمولا نظرات جالبی دارند

b.paseban
شنبه 16 بهمن 1389, 17:29 عصر
با تشکر از شما دوست عزیز.
برای یه همچین کاری جداول به چه صورت در میاد؟ آیا فیلدی از یک جدول درون جدول دیگه باید باشه؟
رابطه ها بین جداول چطوری باید باشه؟(منظورم کلید اصلی و خارجی)
کوئری مربوطه به چه صورت باید باشه؟

archDevil
شنبه 16 بهمن 1389, 18:14 عصر
با سلام خدمت شما دوست عزیز
به نظر من برای برطرف کردن مشکلت می تونی با ساخت یک جدول سوم مشکلت رو بر طرف کنی :
ببین توی جدول دومت یه فیلد ID داری که می خوای با اون نویسندگان رو شناسایی کنی حالا توی جدول مقاله ها هم یه ای دی برای هر مقاله داری
حالا نحوه بر قرار کردن این ارتباط به نظر من باید به این صورت باشد که توی جدول سوم شماره هر مقاله و شماره یوزر نویسنده رو به صورت کلید خارجی اضافه کنی و هر دوی اونا رو کلید کاندید تعریف کنی حالا زمانی که بخواهی کاربر ها رو با استفاده از مقاله شناسایی کنی با جستجوی کد هر مقاله تمام نویسندگان اون مقاله رو به دست بیاری حالا اگه بخوای که مقاله های که یک کاربر خاص نوشته رو استخراج کنی کافیه که کد کاربر رو توی جدول سوم جستجو کنی و سپس کد های بدست آمده رو توی جدول مقالات جستجو کنی
موفق باشی

stabesh
شنبه 16 بهمن 1389, 18:23 عصر
این فایل اکسس رو ضمیمه کردم به نظرم خیلی نباید سخت باشه
خود فرم معادل صفحه سایت و زیر فرمش مشابه gridview

b.paseban
شنبه 16 بهمن 1389, 18:50 عصر
با سلام خدمت شما دوست عزیز
به نظر من برای برطرف کردن مشکلت می تونی با ساخت یک جدول سوم مشکلت رو بر طرف کنی :
ببین توی جدول دومت یه فیلد ID داری که می خوای با اون نویسندگان رو شناسایی کنی حالا توی جدول مقاله ها هم یه ای دی برای هر مقاله داری
حالا نحوه بر قرار کردن این ارتباط به نظر من باید به این صورت باشد که توی جدول سوم شماره هر مقاله و شماره یوزر نویسنده رو به صورت کلید خارجی اضافه کنی و هر دوی اونا رو کلید کاندید تعریف کنی حالا زمانی که بخواهی کاربر ها رو با استفاده از مقاله شناسایی کنی با جستجوی کد هر مقاله تمام نویسندگان اون مقاله رو به دست بیاری حالا اگه بخوای که مقاله های که یک کاربر خاص نوشته رو استخراج کنی کافیه که کد کاربر رو توی جدول سوم جستجو کنی و سپس کد های بدست آمده رو توی جدول مقالات جستجو کنی
موفق باشی
توی دیتا بیس سوم فیلدای ما که از جداول دیگه میخوایم بزاریم دوتا هست یکی مربوط به مقالات یکی هم مربوط به نویسندگان .
ما چطوری باید برای مقاله ای با ID=6 ، addedby=5 , addedby=7,addedby=9 رو درج کنیم ؟
مگه درج همزمان چند ردیف در دیتا بیس امکان داره؟
از استادان کسی نیست راهنمایی کنه؟

b.paseban
شنبه 16 بهمن 1389, 18:55 عصر
این فایل اکسس رو ضمیمه کردم به نظرم خیلی نباید سخت باشه
خود فرم معادل صفحه سایت و زیر فرمش مشابه gridview
تشکر.
راستش من با بانک اکسس تاحالا کار نکردم.
میشه با sql این کار هارامجام بدین؟

stabesh
شنبه 16 بهمن 1389, 19:11 عصر
روش من هم مثل جناب archDevil هست همیشه هم وقتی ارتباط چند به چتد باشه باید همین کارو انجام داد
اگر مشکلتون موقع درج هست به نظر من اول نویسندگان رو در یک صفحه بگیرید بعد در صفحه بعد مقاله و بعد با یک drop down یا combo box یا مشابهشون اسم نویسندگان رو انتخاب و در جدول سوم درج کنید65991

b.paseban
یک شنبه 17 بهمن 1389, 12:49 عصر
من از این روش استفاده کردم و جدول شوم رو ساختم.که سه تا فیلد داره کلید اصلی جدول و addedbyID,articleID .که addedbyID,articleID کلید خارجی هستن.
حالا برای درج از Dropdownlist استفاده می کنم به این شکل :

int article = Convert.ToInt32(DropDownList1.SelectedValue);
int addedby = Convert.ToInt32(DropDownList2.SelectedValue);

این دو تا کنترل به دیتابیس article , addedby وصل شدن و مقدار رو از اون میگیرن.اما این ارور رو میده:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Articlebet_Addes_Article". The conflict occurred in database "Heydarzadeh", table "dbo.Addes_Article", column 'addedID'. The
statement has been terminated. The 'sp_Articlebet_Insert' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead

اما اگه مقادیر خواسته شده برای درج رو از textbox و بصورت دستی بدم درج میشه و اروری نمیده.
مشکل از کجاست؟

b.paseban
یک شنبه 17 بهمن 1389, 13:03 عصر
من از این روش استفاده کردم و جدول شوم رو ساختم.که سه تا فیلد داره کلید اصلی جدول و addedbyID,articleID .که addedbyID,articleID کلید خارجی هستن.
حالا برای درج از Dropdownlist استفاده می کنم به این شکل :

int article = Convert.ToInt32(DropDownList1.SelectedValue);
int addedby = Convert.ToInt32(DropDownList2.SelectedValue);

این دو تا کنترل به دیتابیس article , addedby وصل شدن و مقدار رو از اون میگیرن.اما این ارور رو میده:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Articlebet_Addes_Article". The conflict occurred in database "Heydarzadeh", table "dbo.Addes_Article", column 'addedID'. The
statement has been terminated. The 'sp_Articlebet_Insert' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead

اما اگه مقادیر خواسته شده برای درج رو از textbox و بصورت دستی بدم درج میشه و اروری نمیده.
مشکل از کجاست؟
اشتباه شده بود.
درست شد:اشتباه:

b.paseban
یک شنبه 17 بهمن 1389, 13:59 عصر
من برای نمایش فیلدای جدول سوم مشکلی ندارم و مقادیر ثبت شده رو (توسط query string)بر میگردونم(ArticleID,AddedbyID,pktbl) و این سه تا فیلد در جاهایی که ArticleID =@ArticleID باشه سلکت میشن.
کوئری مورد نظر برای نمایش جدول نویسندگان باید چطوری باشه؟باید توی جدول نویسندگان ArtcileID رو بعنوان کلید خارجی تعریف کنیم؟

stabesh
یک شنبه 17 بهمن 1389, 17:48 عصر
اگر می خواهید نام نویسندگان رو نشون بدید باید از inner join بین جدول سوم و جدول نویسندگان استفاده کنید
اگر می خواهید نشون بدید هر نویسنده چه مقاله هایی داره از inner join بین جدول سوم و جدول مقاله ها استفاده کنید

archDevil
یک شنبه 17 بهمن 1389, 22:46 عصر
با سلام خدمت شما دوست عزیز

توی دیتا بیس سوم فیلدای ما که از جداول دیگه میخوایم بزاریم دوتا هست یکی مربوط به مقالات یکی هم مربوط به نویسندگان .
ما چطوری باید برای مقاله ای با ID=6 ، addedby=5 , addedby=7,addedby=9 رو درج کنیم ؟
مگه درج همزمان چند ردیف در دیتا بیس امکان داره؟
از استادان کسی نیست راهنمایی کنه؟
دوست عزیز این مشکلی که شما می گی فکر نکنم که بستگی به ارتباطات بانک داشته باشه این کار رو هم که شما می گی می شه انجام داد که بستگی به مهارت کد نویسی خدتون داره چرا نشه که توی کد نویسی چند تا Insert داشت حالا مگه محدودیت توی زبان برنامه نویسی وجود داشته باشه(که من تا حالا ندیدم ) همون طور که خود شما انجام دادید و شد :بوس:
حالا گر چه ما از نظر شما ما صلاحیت جواب دادن به سوالات رو نداریم اما به جای inner join برای سادگی کار می تونی از این نوع Select استفاده کنی


select * from a
where ArticleID=(select * from c
where ID=6(

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

b.paseban
دوشنبه 18 بهمن 1389, 11:28 صبح
حالا گر چه ما از نظر شما ما صلاحیت جواب دادن به سوالات رو نداریم اما ....

سلام بر شما.
هر کسی به هر نحوی که منو کمک کنه ممنونشم(تشکر هم که میبینی کردم)
رد صلاحیتشم نمی کنم:قهقهه:
اگه تا اینجاهم که رسیدم مدیونن تمامی بچه های برنامه نویسم(یکی مثل شما)
بالاخره جواب رو هم پیدا کردم (البته با کمک بچه های برنامه نویس)
بازم از همه تشکر می کنم.:تشویق: