مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

alirezafc

عضویت از 1394/01/20

کمک در طراحی دیتابیس

  • جمعه 28 اردیبهشت 1397
  • 21:22
تشکر میکنم

سلام دوستان
 من دارم یه دیتابیس طراحی میکنم مربوط به یک آزمون ورزشی است.آزمون در 10 رشته ورزشی برگزار میشه .رشته ها در جدول رشته های ورزشی بادو فیلد (عنوان و آی دیِ رشته)،ذخیره شده اند.اما همونطور که میدونید امتیازات مربوط به هر رشته شرطی محاسبه میشه.مثلا اگر طرف در رشته ی درازنشست بین 10 تا 20 تا درازنشست بره،امتیاز 20 میگیره،اگر بیشتر از 20 تا بره امتیاز 40 میگیره و...
حالا من میخوام این شرط ها رو هم توی یه جدول ذخیره کنم و برنامه شرط رو از داخل دیتابیس بخونه.و با تعدادی که ورزشکار رفته مقایسه کنه و بهش امتیاز بده.اما توی طراحیِ جدول مربوط به این شرط ها موندم.کسی میدونه من چجوری میتونم شرط های منطقی رو داخل جداول ذخیره کنم یا باید براشون استور پروسیجر بنویسم؟

با تشکر

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 30 اردیبهشت 1397
  • 08:41

به نظر من بهتره منطق را داخل برنامه قرار دهید و در بانک محاسبه نکنید

اطلاعات را ذخیره کنید و قبل از ذخیره محاسبات را انجام دهید

کاربر سایت

phoenixt100

عضویت از 1395/06/19

  • دوشنبه 31 اردیبهشت 1397
  • 00:49
سلام اگر اصرار دارید سیستمتون داینامیک باشه کافیه یه کلاس برای شروط طراحی کنید و یک ارتباط یک به چند بین شرط ها و رشته ورزشی مورد نظر ایجاد کنید. می تونید اینجوری مدل بسازید: Public class SportField { Public int Id{get; set;} Public string Name{get; set;} Public virtual ICollection Conditions{get; set;} } Public class Condition { Public int Id{get; set;} Public int SportFieldId{get; set;} Public virtual SportField SportField{get; set;} Public int Min{get; set;} Public int Max{get; set;} Public int Point{get; set;} } اینجا هر رشته ورزشی می تونه به چندین شرط متصل بشه ولی هر شرط فقط به یک رشته متصل شده (ارتباط 1 به چند) شروع و پایان بازه رو توی min, max و امتیاز اون بازه رو توی point بریزید. از اینجا به بعد به قول آقای مدائنی دیگه باید محاسبات رو بیارید داخل منطق برنامه بعنوان مثال اگر تعداد حرکات صحیح انجام شده رو با متغیری مثل CorrectMoves نمایش بدیم در انتها باید یه کوئری شبیه به این بزنید int result = 0; Condition range = someSportField.Conditions.FirstOrDefault(c => c.Min <= CorrectMoves & & CorrectMoves <= c.MAX); if(range! =null) { result = range.Point; } با این لینک کوئری اون condition ی که تعداد حرکات انجام شده توش صدق می کنه رو پیدا می کنیم و در صورت وجود، مقدار point ی که برای اون بازه تعریف شده رو تو خروجی بر می گردونیم. البته این کد زبان c# و EF code first بود.نمی دونم شما از چه زبان یا فریمورکی استفاده می کنید همین ساختار رو می تونید db first هم کار کنید. امیدوارم ایده کلی رو گرفته باشید
کاربر سایت

alirezafc

عضویت از 1394/01/20

  • دوشنبه 31 اردیبهشت 1397
  • 18:02

از هر دوی شما عزیزان تشکر میکنم مخصوصا کاربر phoenixt

ایده تون عالی بود. مرسی

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)