• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
دسته بندی محصولات با خصوصیات متفاوت
#1
سلام دوستان
در مورد پیاده سازی دسته بندی های محصولات با خصوصیات متفاوت برای هر دسته،چه روشی هایی وجود دارد؟
یک روشی هست که شامل 5 جدول می شود(Product,Category,Property,CategoryProperty,ProductProperty) از نظر سرعت کوئری گرفتن این روش چطور است؟
ممنون
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :
#2
میشه توضیح بدید و با مثال منظورتون رو برسونید ؟
  پاسخ
تشکر شده توسط :
#3
مثلا آیتم یا محصول ما نرم افزار هستش. دسته بندی بر اساس نوع نرم افزار هست. یک نرم افزار امکان داره عضو چند دسته بندی باشد.
هر دسته بندی شامل خصوصیات مخصوص به خودش است.

حالا میخوام بدونم چه روش هایی برای اینکار وجود داره؟ و مزایا و معایب هر کدوم چی هست؟ مثلا از لحاظ سرعت و بهینه بودن...

برای دیتابیس که احتمال میره 3000 تا آیتم در آینده داشته باشه،
در صورتی که میزان select از insert و update و delete بیشتر باشه چه روش پیشنهاد میشه و برعکسش چطور؟

مرسی از توجه تون.
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :
#4
یه جدول برای موضوعات در نظر بگیرید
id,category_title,category_option1 و ....

برای محصولات هم یک جدول product میخواید

برای ست کردن دسته بندی هم یک جدول واسطه
cateogory_id,product_id
لازم دارید .

مثلا محصول 8 توی موضوعات 1 و 2 و 3 قرار بگیره
سه رکورد به این جدول اضافه میکنید .

رابطه چند به چند هست پس به این جدول واسطه نیاز دارید
  پاسخ
تشکر شده توسط :
#5
خصوصیات دقیقن کجای این رابطه قرار گرفته؟ خصوصیات برای هر محصول متفاوته.
دقت کنید لطفن. Shy
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :
#6
در جدول product خصوصیات محصولتون رو قرار بدید .
  پاسخ
تشکر شده توسط :
#7
ممنون. ولی خصوصیات برای هر دسته بندی متفاوته. نمیشه یک فیلد با اندازه ثابت براش در نظر گرفت. مقادیر این فیلد برای هر رکورد متفاوته! مثلا وقتی یک محصول عضو چند دسته بندی هست، چندین مقدار خصوصیت برای هر محصول داره.
اگر منظورتون روش EAV هست که بنظرم مناسب نباشه. چون هم نوع خصوصیات متفاوته هم اندازه ی مقادیر خصوصیات. و اجرای این روش توی پایگاه داده mysql که رابطه ای هست درسته آیا؟
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :
#8
نقل قول: ممنون. ولی خصوصیات برای هر دسته بندی متفاوته. نمیشه یک فیلد با اندازه ثابت براش در نظر گرفت. مقادیر این فیلد برای هر رکورد متفاوته! مثلا وقتی یک محصول عضو چند دسته بندی هست، چندین مقدار خصوصیت برای هر محصول داره.
رابطه یک به چند میشه
یک جدول دیگه در نظر بگیرید
product_option با فیلد های
product_id , option_key,option_value
  پاسخ
تشکر شده توسط : sara147
#9
این راه شما یه چیزی کم داره. چون توی این جدول مشخص نیست که خصوصیات مربوط به کدوم دسته بندیه. یه جدول CategoryProperty(یا category_option شما) نیاز داریم تا معلوم کنیم هر دسته بندی شامل چه خصوصیاتی میشه. و در نهایت میرسیم به همون راه حلی که من در پست اولم گذاشتم.
در نهایت برگشتیم سر نقطه ی اول!


بهتره یه کم جامع تر به مسئله نگاه کنیم.
کلا برای این دست مسائل سه روش هست( به نظر من البته):

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

2.روش EAV: مثلا یه جدول برای دسته بندی داشته باشیم و یه جدولم برای محصولات و در جدول محصولات فیلد category_id و option داشته باشیم . بسته به اینکه دسته بندی محصول چیه خصوصیات محصول رو در قالب json در فیلد option بریزیم.
مزایا: ساده بودن، سرعت کوئری بالا
معایب:هر محصول میتونه فقط عضو یک دسته بندی باشه(یا حداقل اینکه تعدادش محدوده). چون فیلد option ثابته ما باید حداکثر اندازه رو در نظر بگیریم و در برخی رکوردها هدر رفت فضا رو داریم.

3. روش نرمال سازی شده برای پایگاه داده های رابطه ای: شامل پنج تا جدول Product,Category,Property,CategoryProperty,ProductProperty میشه.
مزایا:نرمالیزه شده است، دسته بندی و خصوصیات پویا هستند و میشه تغییرش داد.
معایب: پیچیدگیش زیاده، چون تعداد جداول بالاست و باید join کنیم سرعت پایین میاد.

نظرتون رو لطفا بفرمائید. اگر بشه این تحلیل رو کامل کرد خیلی جاها کاربرد داره.
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط : nimaee
#10
ما سه نوع رابطه داریم که براساس اون میتونیم دیتابیسامون رو بسازیم .
یک به یک
یک به چند
و چند به چند

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

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


پرش به انجمن:


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