• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
وجود یک فیلد با مقدار null یا تکراری بهینه تر است یا استفاده از جدول واسط و join آن ه
#1
Question 
سلام دوستان
شرمنده مجبورم کامل توضیح بدم که بتونم سوالم را درست مطرح کنم و احتمالا طولانی خواهد شد
ممنون که وقت می ذارید

من دو تا جدول اصلی دارم به اسم های questions و packages با فیلدهای زیر:

id
question_type_id
title
type
price


سوال های من ممکنه تک جوابی باشن (y/n) که در این حالت یا این سوال انتخاب میشه یا نه؟ اگر شد یه هزینه ای خواهد داشت (price) و ممکنه چند جوابی باشن که پاسخ هاش در جدول question_answers ذخیره خواهند شد که هر پاسخی هم قیمت متفاوتی می تونه داشته باشه

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

id
title
description


خوب تو هر پکیج یه سری از سوالات(امکانات) به صورت پیش فرض معرفی می شن اما کاربر می تونه سوالاتی که پیش فرض پکیج نیستن را هم پاسخ بده پس جدول سوال با پکیج رابطه چند به چند داره و اینم جدولش به اسم packages_questions با فیلدهای زیر:

id
package_id
question_id


خوب این جدول مشخص می کنه که کدام سوال پیش فرض کدام پکیج است و وقتی پکیج انتخاب شد سوالات پیش فرض آن باید تیک بخوره و ... اما این مسئله وقتی درسته که سوال تک جوابی باشه اگر چندتا پاسخ داشته باشه عملا باید یکی از پاسخ های اون سوال پیش فرض پکیج باشه پس یه کاری که میشه کرد اینه که توی جدول واسط (packages_questions) یه فیلد دیگه به اسم question_answer_id که مشخص کننده پاسخ سوال است بذاریم اما توی این مورد تعداد سوالات تک جوابی ما بیش تر از چندجوابی هست پس اکثر وقت ها این فیلد خالی می مونه برای اینکه این اتفاق نیافته میشه یه جدول دیگه برای ارتباط بین پکیج-سوال و پاسخ ها در نظر گرفت یعنی یه جدول واسط بین جدول packages_questions و question_qnswers با فیلد های زیر:

id
packages_question_id
question_answer_id


حالا سوال اینجاست اضافه کردن اون فیلد (با توجه به اینکه ممکنه مقدارش خالی بمانه و ... ) بهتره یا اضافه کردن این جدول آخر؟

یه مثال می زنم که مشخص بشه:

مثلا یه صفحه ثبت سفارش داریم برای سفارش طراحی وب

کاربر که وارد صفحه میشه اون بالا مثلا نوشته پکیج مقدماتی | متوسط | پیشرفته

و یه سری ماژول هم در نظر گرفته شده (این ماژول ها همان رکوردهای جدول questions است) مثل:

1- آیا زبان انگلیسی می خواهید؟ [چک باکس که تیک بزنه و مشخص میشه می خواد یا نه] ان تومان!

2- دامنه ی مورد نظر شما چیست؟
ir com net org

خوب سوال اول یک سوال تک جوابی است و سوال دوم یک سوال چند جوابی
حالا مثلا زبان انگلیسی پیش فرض برای پکیج مقدماتی در نظر گرفته نشده ولی دامنه ir پیش فرض این پکیج است پس وقتی کاربر ابتدا پکیج مقدماتی را انتخاب کنه تیک ir خواهد خورد
ولی زبان انگلیسی پیش فرض پکیج پیشرفته است و وقتی کاربر آن پکیج را انتخاب کرد تیک می خوره (به صورت خودکار)

خوب رابطه ی بین سوال زبان انگلیسی و پکیج پیشرفته مشخص است و با استفاده از جدول واسط packages_questions این ارتباط برقرار میشه
اما رابطه بین پکیج مقدماتی و ir فقط رابطه بین پکیج و سوال نیست چرا؟
چون توی جدول packages_questions رابطه بین پکیج و سوال مشخص میشه اما سوال های چند جوابی پاسخ هاشون توی یه جدول دیگه است و باید بدونیم این پکیج که با این سوال رابطه داره کدام پاسخ این سوال پیش فرض این پکیج است

اگر لازمه بفرمایید که بازم توضیح بدم
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان