سجاد
6 سال پیش توسط سجاد مطرح شد
4 پاسخ

ارتباط بین جداول به کمک eloquent

سلام

به نظر شما با کمک eloquent لاراول چه طوری می تونیم "بهینه ترین" حالت از نظر تعداد کوئری برای دریافت اطلاعاتی که نوشتم ایجاد کنیم؟

1- یک جدول دسته بندی داریم که حاوی یک سری اطلاعات پایه در مورد هر دسته بندی هست. ( مثلا 10 رکورد )
2- یک جدول محصولات داریم که اطلاعات پایه ای هر محصول درونش ذخیره شدند.
3- به ازای هر دسته بندی یک جدول جداگانه وجود داره که جزئیات اختصاصی هر محصول رو درون خودش نگهداری می کنه. ( با نام های گوناگون )
4- جدول محصولات دو ستون به اسم category_id و item_id داره که اولی شماره آی دی دسته بندی هست و دومی شماره آیتم در جدول جزئیات اختصاصی هر آیتم.
5- اینکه هر جدول جزئیات اختصاصی مربوط به کدوم دسته بندی میشه، چیزی هست که باید کد معرفی کنیم.

حالا می خواهیم پس از دریافت تعدادی از محصولات به کمک مدل به اطلاعات دسته بندی و همین طور جدول جزئیات اختصاصی مربوط به تک تک محصولات دسترسی داشته باشیم.

  • راه های گوناگونی برای این موضوع امتحان کردم ولی هنوز شک دارم که بهینه ترین حالت چیه.
  • ممنون میشم ایده تون رو با بنده به اشتراک بگذارید.

ثبت پرسش جدید
vahid Mohammadi
@viva.mohammadi 6 سال پیش مطرح شد
2

@sajad.hi
نه بیبنید شما اول attribute های مختلف رو در یک جدول تعریف میکنید و بعد در یک جدول دیگه مقدار و یا مقادیر مربوط به اون attribute رو تعریف می کنید فرض کنید صفت رنگ رو ایجاد کردید(در جدول صفت ها) که مقادیر مختلفی رو می تونه بگیره (جدول مقادیر صفتها) شما حالا با یک رابطه چند به چند می تونید این صفت به همراه مقادیر صفت رو به محصولات و دسته بندیهاتون نسبت بدید. این طوری شما هم انعطاف دارید بزای تعریف صفتهای جدید و به کاربردن این صفت ها برای هر موجودیتی در دیتابیستون
طرح زیر یک نمایی از این نوع پیاده سازی رو نشون می ده
Image of Yaktocatگر به نظر من همین طرح رو پلی مرفیک کنید بسیار عالی و سریع کار خواهد کرد


امید
@okjooon 6 سال پیش مطرح شد
0

@sajad
سلام،به نظر من بهینه ترین حالت اینه که شما جزئیات هر محصول رو به category وصل کنید.
اینطوری وقتی که میخواید محصولی رو add کنید،وقتی که دسته بندی رو واسه اون محصولتون انتخاب میکنید تمام جزئیات اون محصول هم به همراه category مورد نظر به محصولتون اضافه میشه و اینجوری راحت تر و سریع تر میتونید یک محصول رو اضافه کنید.


vahid Mohammadi
@viva.mohammadi 6 سال پیش مطرح شد
1

@sajad
سلام بسیار سوال خوبیه
بیبینید به نظر من شما بهتره برای ذخیره جزییات هر محصول از یک جدول به نام Attribute استفاده بفرمایید که بصورت KEY/Value تعریف میشه و شما بتونید برای هر محصول هر زمانی که خواستید یک ویژگی جدید اضافه بفرمایید. و این جدول رو با جدول محصولاتتون مرتبط کنید و نه با جدول دسته بندی ها
نکته مهم : امکان داره یک سری ویژگی هم به دسته بندی هاتون هم اختصاص بدین و شاید مشترک با محصولاتتون باشه، برای اینکار بهتره ارتباط Many to Many برقرار کنید و هم ارتباط Product--Attribute  رو داشته باشید و هم ارتباط Category-Attribute
نکته مهمتر : خوشبختانه در لاراول می تونید از ارتباطات Polymorphic استفاده کنید که سناریو بالا رو بسیار ساده میکنه و واقعا کویری گرفتن رو لذت بخش میکنه

توصیه بعدی من این هست که جدول دسته بندی ها تون (Categories) رو به صورت SELF-JOINT پیاده سازی کنید تا بتونید به صورت دلخواه زیر شاخه برای دسته بندیهاتون ایجاد کنید.


سجاد
تخصص : برنامه نویس
@sajaddp 6 سال پیش مطرح شد
0

سلام
@okjooon
حقیقت متوجه منظورتون نشدم، البته الان مسئله برای زمان خواندن اطلاعات هست و برای اضافه کردن مشکلی وجود نداره.

@viva.mohammadi
ممنون از پیشنهادتون، چیزی که بنده برداشت کردم، این بود که پیشنهاد شما این هست که چیزی مانند جداول comment و commentmeta در وردپرس بیایم ساختاربندی کنیم.

comment
    comment_ID
    comment_post_ID
    ....

commentmeta 
    meta_id
    comment_id
    meta_key
    meta_value

سوالی که پیش میاد این هست که این کار باعث تولید یک جدول بسیار سنگین نمیشه؟
مثلا اگر جدوال جزئیات دسته ها به طور میانگین 5 ستون داشته باشند ما به ازای هر محصول در جدول Attribute داریم 5 رکورد اضافه می کنیم.


vahid Mohammadi
@viva.mohammadi 6 سال پیش مطرح شد
2

@sajad.hi
نه بیبنید شما اول attribute های مختلف رو در یک جدول تعریف میکنید و بعد در یک جدول دیگه مقدار و یا مقادیر مربوط به اون attribute رو تعریف می کنید فرض کنید صفت رنگ رو ایجاد کردید(در جدول صفت ها) که مقادیر مختلفی رو می تونه بگیره (جدول مقادیر صفتها) شما حالا با یک رابطه چند به چند می تونید این صفت به همراه مقادیر صفت رو به محصولات و دسته بندیهاتون نسبت بدید. این طوری شما هم انعطاف دارید بزای تعریف صفتهای جدید و به کاربردن این صفت ها برای هر موجودیتی در دیتابیستون
طرح زیر یک نمایی از این نوع پیاده سازی رو نشون می ده
Image of Yaktocatگر به نظر من همین طرح رو پلی مرفیک کنید بسیار عالی و سریع کار خواهد کرد


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

ورود یا ثبت‌نام