راکت

دیتابیس فروشگاهی بخش ویژگی محصول و تغییر قیمت نسبت به ویژگی

12 پاسخ

با سلام خدمت دوستان عزیز.
بنده شروع کردم که دیتابیس یه سیستم فروشگاهی رو تحلیل کنم.
ولی تو یه بحثی به مشکل برخودم.
بخش ویژگی محصولات به صورت داینامیک هستش.
چطوری میشه کاری کرد که قیمت محصول ( اضافه کردن یا کم کردن ) نسبت به ویژگی انتخاب شده، متغیر باشه ؟
مثلا قیمت پیراهن سایز X با قیمت پیراهن سایز XL تفاوت داشته باشه...
یا مثلا نسبت به رنگ محصول قیمت نیز تغییر داشته باشه...
و اینکه چطور بتونیم، موجودی پیراهن سایز X و موجودی پیراهن سایز XL رو هم داشته باشیم...

@ali.bayat
@Alimotreb
@hesammousavi
@milad
@khanzadimahdi
@endworld

ثبت پرسش جدید

پاسخ‌ها

12
Alimotreb
Alimotreb
@Alimotreb

تخصص: کانفیگ سرور و برنامه نویس

سلام
@mrerfan.ir

اگر محصولات به این شکل هست
به نظر میشه یه جدول در نظر گرفت که قابلیت هایی یا ویژگی هایی مثل
XL
L
رنگ
و ...
اینا رو با یه ضریبی در نظر گرفت
شما تو محصولاتت پیرهن داری قیمتش 2 هزار تومنه ، اگر xl بود قیمت در ضریبش که به فرض 2 هست ضرب بشه ، بشه 4 هزار تومان
اگر سفید بود ضریب 3 یعنی ، یه پیرهنی که هم XL هست و هم سفید میشه چند ؟ 12 هزار تومان!

اینطوری میتونید اوکی کنید

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

سه تا جدول باید داشته باشید

جدول محصول
جدول ویژگی
جدول رابط بین محصول و ویژگی

قیمت ها رو درون جدول رابط ثبت کنید. (به دو روش میشه عمل کرد که در زیر توضیح دادم)

مثلا محصول ۱ با ویژگی ۵ رابطه داره و در این رابطه قیمتش میشه ۵ تومن
و محصول ۱ باز با ویژگی ۱۰ رابطه داره و قیمتش میشه ۱۰ تومن

روش بهتر:
البته اگه رابطه ها چند به چند هست بهتره یه قیمت کلی برای محصول در نظر بگیرید و به ازای هر ویژگی یه قیمت متغیر داشته باشید که به قیمت اصلی اظافه بشه (اینجوری بهتره)

مثلا محصول ۱ قیمتش ۱۰۰ تومن هست اما وقتی که کاربر ویژگی ۲ رو برای این محصول انتخاب میکنه توی جدول واسط یه قیمت بزارید . اگه قیمت توی جدول واسط موجود بود با قیمت اصلی جمع بشه و اگه نبود که قیمت محصول تغییری نمیکنه

شاید پاسخ شما همین‌جا باشد

عرفان همتی
عرفان همتی
@erfanhemmati

تخصص: Backend Developer

@khanzadimahdi
فرمایش شما صحیح.
ولی طبق گفته شما چطوری میشه موجودی اون محصول رو هم مدیریت کرد ؟
ممنون میشم اگه راهنماییم بکنید.

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

موجودی کل محصول رو درون جدول محصول نگهداری کنید و موجودی هر کدوم از ویژگی ها رو درون جدول خودشون قرار بدید.

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

حسین ستاری
حسین ستاری
@Ho3ein

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

درواقع منظور دوست عزیزمون این هست که اگر محصولی به عنوان پیراهن تعریف شد و این پیراهن 2 عدد با سایز xl در رنگ های قرمز و سبز بود رو چطوری میشه کنترل و تعریف کرد T

حالا بر فرض فروشگااه چند منظوره باشه ، چطور میشه برای یک لپتاپ تفاوت قیمت گارانتی دار در رنگ قرمز و بدون گارانتی در رنگ سفید رو پیاده کرد

منم نمیدونم 😁😁😁😁

@hesammousavi اقای موسوی به فریادمون برس ....

کیان صادقی
کیان صادقی
@kian.sdi.0028

تخصص: کار‌آموز برنامه نویسی بک اند

@Ho3ein
@erfanhemmati
آقا من امروز به این چالش برخوردم
دیدم شما ۵ ماه پیش راجع بهش بحث کردید گفتم شاید تا الان راهشو یافته باشید اگر اینطور هست ممنون میشم به منم یه راهنمایی بدید

رافق مجتهدزاده
رافق مجتهدزاده
@rafig

تخصص: برنامه نویسی php

آقا منم امروز به این چالش برخوردم
دیدم شما 4 ماه پیش راجع بهش بحث کردید گفتم شاید تا الان راهشو یافته باشید اگر اینطور هست ممنون میشم به منم یه راهنمایی بدید

امین محمدزاده
امین محمدزاده
@amin.webdesign

تخصص: برنامه نویسی وب - Laravel

چاره کار شما دست منه. 😁😁😁
الزاما قرار نیست به کار به صورت خیلی پیچیده نگاه کرد. اینکه دوستانی که راهنمایی میکنن کلی گویی هست و با مشخص کردن صرفا تعداد دیتابیس نمیشه مشکلی رو حل کرد.
خب راه حل چیه؟ راه حل بر حسب استراتژی هر شخص برنامه نویس میتونه متفاوت باشه و مدلهای خیلی زیادی رو میشه برای این حالت پیاده سازی کرد.
روشی رو بهتون میگم که بتونید خیلی راحت این موضوع رو برای خودتون حل کنید. الزاما روشی که میگم بهترین راه حل نیست ولی از بین چندین الگویی که قبلا طراحی کردم این راحت تر هست.
شما دو تا جدول نیاز دارید که یکی products هست و یکی هم productvariants که این دو تا جدول از طریق id در جدول products به productid در جدول productvariants متصل میشه
جدول قیمتگذاری و مدیریت تعداد هر محصول/ویژگی جدول productvariants هست.
شما برای هر محصولتون چند تا ویژگی دارید که میتونه در آن واحد هر محصول بر اساس دو تا ویژگی از بقیه محصولات جدا بشه. مثلا:
تی *** (آبی / L -- آبی / XL - آبی / M ) - (قرمز / L -- قرمز / XL - قرمز / M ) که هر کدام هم تعداد مشخص خودشون رو دارن.
خب هر کدوم از ویژگی هایی که بالا نوشتم به عنوان یک ردیف در دیتابیس قرار میگیرن.
آبی / L - تعداد 2 - قیمت 100000
آبی / XL - تعداد 5 - قیمت 110000
آبی / M - تعداد 0 - قیمت 100000
قرمز / L - تعداد 4 - قیمت 98000
قرمز / XL - تعداد 7 - قیمت 99000
قرمز / M - تعداد 1 - قیمت 105000

بعد از اینکه داده هارو بر این اساس در دیتابیس ذخیره کردید میتونید این ویژگی هارو توی صفحه محصول به صورت select box نمایش بدید و کاربر با انتخاب هر کدوم بتونه قیمتش رو ببینه که حالا این قسمت رو بر حسب سلیقه خودتون میتونید طراحی و برنامه نویسی کنید.
حتی به راحتی میتونید برای هر کدوم از ویژگی ها قیمت فروش ویژه و تاریخ شروع و انقضای فروش ویژه تعریف کنید.

مصطفی
مصطفی
@mostafanori

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

@amin.webdesign
تو این روش مثلا ویژگی های دیگه مثل وزن و ... هم باشن یعنی هی شما میخوای ستون اضافه کنی به جدول؟؟؟

امین محمدزاده
امین محمدزاده
@amin.webdesign

تخصص: برنامه نویسی وب - Laravel

@mostafanori
مگه قراره چند تا ویژگی توی قیمت گذاری محصول دخیل باشه؟ همین دیجی کالا به ندرت دو تا ویژگی توی قیمت گذاری محصولاتش تاثیر میذاره. یکیش رنگه و یکی هم سایز هست. در ثانی من این روشی که گفتم یه ستون در نظر گرفتم برای ویژگی ها. یعنی عنوان تلفیقی ویژگی ها توی یه ستون قرار میگیره.

مصطفی
مصطفی
@mostafanori

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

من جدول هام رو اینطوری درست میکنم . شاید به درد کسی بخوره:

### products:

-id
-title
-slug
-parent_id
-is_variation
-quantity
-original_price
-discount_price

نکته : هر ستون دیگه ای دوست داشتید میتونید به جدول محصولات اضافه کنید. البته خود من معمولا یه جدول meta درست میکنم و اطلاعات اضافی رو به صورت key , value اونجا ذخیره میکنم . اگر پکیج لاراول هم بخواید من از zoha/laravel-meta استفاده میکنم
ستون isvariation هم خیلی مهم . اینجا به صورت صفر و یک تعیین میکنیم که محصول ما متغییر هست یا ساده است . کسایی که وردپرس کار کردن بهتر متوجه میشن


### attributes:

-id
-title
-slug

یه جدول واسط هم برای ارتباط بین محصولات و ویژگی ها لازم داریم . البته باید حواسمون باشه هر کدوم از این ارتباط ها نیاز به تعداد و قیمت و شناسه محصول و ... مخصوص خودش داره . مثلا (مداد قرمز کوچک) قیمتش و تعدادش و ... قطعا با (مداد قرمز بزرگ) فرق میکنه

### product_attributes:

-id
-product_id
-attribute_id
-original_price
-discount_price
-value
-quantity

در جدول بالا یه مشکلی که هست اینکه مقداری که به ویژگی مثلا رنگ میخواد ادمین اختصاص بده هر دفعه باید تایپ کنه (قرمز) . اگر میخواید مثل وردپرس مثلا ویژگی قرمز رو که add کردید و خواستید برای محصولتون مقدار تعیین کنید، خودش بهتون پیشنهاد بده ، میتونید دو جدول دیگه به اسم های valueو attribute_values درست کنید و مقادیری که برای هر ویژگی محصول ست میکنید ، اونجا هم ذخیره کنید که وقتی خواستید محصول بعدی رو ایجاد کنید ، بعد افزودن ویژگی رنگ ، اتوماتیک رنگ های استفاده شده و ذخیره شده رو بتونید نمایش بدید به ادمین که انتخاب کنه بجای اینکه تایپ کنه و ... مشکلات خودش به وجود بیاد ( مثلا یه بار مقدار <ابی> برای رنگ ست شده یه بار <آبی> ست شده . چون هربار باید تایپ کنه ممکنه تایپ های مختلف مقادیر مختلف ذخیره بشه که احتمالا بعدا تو فیلتر درست کردن با مقادیر و ... به مشکل میخورید) . پس اگر این کاری که گفتم رو کردید بجای ستون value از ستون value_id باید استفاده کنید

پس موقع نمایش محصول و ... اول کار چک کنید محصول ساده است یا متغیر . اگر متغییر بود مستقیم با جدول product_attribute کار دارید . حواستون باشه بعد از اینکه کاربر از درگاه برگشت حتما از تعداد مثلا محصول ( مداد قرمز کوچک) یه دونه کم کنید که تعداد به روز بمونه.


### values:
-id
-title
-slug

### attribute_values:
-id
-attribute_id
-value_id
-order_number

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


خب الان همچنان یه مشکلی داریم . اینکه چندتا ویژگی نمیتونیم داشته باشیم برای یه محصول . برای این کار من مثل وردپرس عمل میکنم . یعنی ابتدا یه محصول میسازم که آی دی اون ۱ میشه . بعد یسری ویژگی دارم . موقع ساخت ویژگی باید یه تیک بزارم که ادمین تعیین کنه (استفاده به عنوان متغیر) . حالا موقع ایجاد محصول ادمین اگر خواست محصول متغیر ایجاد کنه ، به ازای هر متغییری که میزنه تصویری شبیه زیر باید ببینه :
توضیح تصویر رو وارد کنید

به ازای هر سطری که در بالا ادمین ایجاد میکنه من یک محصول ایجاد میکنم که parentid براش در نظر میگیرم و اون رو برابر آی دی محصول اصلی قرار میدم

هر کدام از سطرهای عکس بالا هم دقیقا انگار یه محصول جدا هستند . چون اگر هرکدوم رو باز کنه ادمین باید بتونه براش قیمت ، قیمت تخفیف خورده ، تعداد ، کد منحصربه فرد و .... تعیین کنه (یعنی ما یه محصولی داریم که چندین قیمت و چندین قیمت تخفیف خورده و ... میخواد داشته باشه) .
توضیح تصویر رو وارد کنید
این اطلاعات اضافه باید در جدول product_meta ذخیره بشه برای هر محصول:

-id
-product_id
-meta_key
-meta_value

خلاصه:
یه جدول ویژگی داریم که باید اول از همه ویژگی ایجاد کنیم . هنگام ایجاد باید مشخص باشه که قرار هست برای متغیر ها استفاده بشن یا نه
حالا ادمین میاد محصول ایجاد کنه . باید یه جایی تیک بزنه که میخوام محصولم متغیر باشه . نمیخوام ساده باشه ( اگر ساده خواست که فقط یه نوع دیتا داریم و همیش مستقیم تو جدول products ذخیره میشه) . وقتی تیک محصول متغییر رو زد ، باید هر چندتا متغییر که خواست بتونه ایجاد کنه . هر متغییر هم مثل یک محصول جدا باید براش داخل جدول products سطر جدید ایجاد بشه و parentid محصول اصلی براش در نظر گرفته بشه و تمام اطلاعات اضافی از قبیل قیمت و قیمت تخفیف خورده و تعداد و عکس و ... باید در جدول productmeta ذخیره بشه

ابوالفضل زارعی قره بابا
ابوالفضل زارعی قره بابا
@abolfazlzarei

تخصص: سئو

خیلی سخته همون وردپرس اینا را تمیز و آماده تحویل میده

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

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