سلام
به نظر شما با کمک eloquent لاراول چه طوری می تونیم "بهینه ترین" حالت از نظر تعداد کوئری برای دریافت اطلاعاتی که نوشتم ایجاد کنیم؟
1- یک جدول دسته بندی داریم که حاوی یک سری اطلاعات پایه در مورد هر دسته بندی هست. ( مثلا 10 رکورد )
2- یک جدول محصولات داریم که اطلاعات پایه ای هر محصول درونش ذخیره شدند.
3- به ازای هر دسته بندی یک جدول جداگانه وجود داره که جزئیات اختصاصی هر محصول رو درون خودش نگهداری می کنه. ( با نام های گوناگون )
4- جدول محصولات دو ستون به اسم category_id و item_id داره که اولی شماره آی دی دسته بندی هست و دومی شماره آیتم در جدول جزئیات اختصاصی هر آیتم.
5- اینکه هر جدول جزئیات اختصاصی مربوط به کدوم دسته بندی میشه، چیزی هست که باید کد معرفی کنیم.
حالا می خواهیم پس از دریافت تعدادی از محصولات به کمک مدل به اطلاعات دسته بندی و همین طور جدول جزئیات اختصاصی مربوط به تک تک محصولات دسترسی داشته باشیم.
@sajad.hi
نه بیبنید شما اول attribute های مختلف رو در یک جدول تعریف میکنید و بعد در یک جدول دیگه مقدار و یا مقادیر مربوط به اون attribute رو تعریف می کنید فرض کنید صفت رنگ رو ایجاد کردید(در جدول صفت ها) که مقادیر مختلفی رو می تونه بگیره (جدول مقادیر صفتها) شما حالا با یک رابطه چند به چند می تونید این صفت به همراه مقادیر صفت رو به محصولات و دسته بندیهاتون نسبت بدید. این طوری شما هم انعطاف دارید بزای تعریف صفتهای جدید و به کاربردن این صفت ها برای هر موجودیتی در دیتابیستون
طرح زیر یک نمایی از این نوع پیاده سازی رو نشون می ده
گر به نظر من همین طرح رو پلی مرفیک کنید بسیار عالی و سریع کار خواهد کرد
@sajad
سلام،به نظر من بهینه ترین حالت اینه که شما جزئیات هر محصول رو به category وصل کنید.
اینطوری وقتی که میخواید محصولی رو add کنید،وقتی که دسته بندی رو واسه اون محصولتون انتخاب میکنید تمام جزئیات اون محصول هم به همراه category مورد نظر به محصولتون اضافه میشه و اینجوری راحت تر و سریع تر میتونید یک محصول رو اضافه کنید.
@sajad
سلام بسیار سوال خوبیه
بیبینید به نظر من شما بهتره برای ذخیره جزییات هر محصول از یک جدول به نام Attribute استفاده بفرمایید که بصورت KEY/Value تعریف میشه و شما بتونید برای هر محصول هر زمانی که خواستید یک ویژگی جدید اضافه بفرمایید. و این جدول رو با جدول محصولاتتون مرتبط کنید و نه با جدول دسته بندی ها
نکته مهم : امکان داره یک سری ویژگی هم به دسته بندی هاتون هم اختصاص بدین و شاید مشترک با محصولاتتون باشه، برای اینکار بهتره ارتباط Many to Many برقرار کنید و هم ارتباط Product--Attribute رو داشته باشید و هم ارتباط Category-Attribute
نکته مهمتر : خوشبختانه در لاراول می تونید از ارتباطات Polymorphic استفاده کنید که سناریو بالا رو بسیار ساده میکنه و واقعا کویری گرفتن رو لذت بخش میکنه
توصیه بعدی من این هست که جدول دسته بندی ها تون (Categories) رو به صورت SELF-JOINT پیاده سازی کنید تا بتونید به صورت دلخواه زیر شاخه برای دسته بندیهاتون ایجاد کنید.
سلام
@okjooon
حقیقت متوجه منظورتون نشدم، البته الان مسئله برای زمان خواندن اطلاعات هست و برای اضافه کردن مشکلی وجود نداره.
@viva.mohammadi
ممنون از پیشنهادتون، چیزی که بنده برداشت کردم، این بود که پیشنهاد شما این هست که چیزی مانند جداول comment و commentmeta در وردپرس بیایم ساختاربندی کنیم.
comment
comment_ID
comment_post_ID
....
commentmeta
meta_id
comment_id
meta_key
meta_value
سوالی که پیش میاد این هست که این کار باعث تولید یک جدول بسیار سنگین نمیشه؟
مثلا اگر جدوال جزئیات دسته ها به طور میانگین 5 ستون داشته باشند ما به ازای هر محصول در جدول Attribute داریم 5 رکورد اضافه می کنیم.
@sajad.hi
نه بیبنید شما اول attribute های مختلف رو در یک جدول تعریف میکنید و بعد در یک جدول دیگه مقدار و یا مقادیر مربوط به اون attribute رو تعریف می کنید فرض کنید صفت رنگ رو ایجاد کردید(در جدول صفت ها) که مقادیر مختلفی رو می تونه بگیره (جدول مقادیر صفتها) شما حالا با یک رابطه چند به چند می تونید این صفت به همراه مقادیر صفت رو به محصولات و دسته بندیهاتون نسبت بدید. این طوری شما هم انعطاف دارید بزای تعریف صفتهای جدید و به کاربردن این صفت ها برای هر موجودیتی در دیتابیستون
طرح زیر یک نمایی از این نوع پیاده سازی رو نشون می ده
گر به نظر من همین طرح رو پلی مرفیک کنید بسیار عالی و سریع کار خواهد کرد
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟