توی فروشگاههای اینترنتی میدونید که محصولات دارای دسته بندی و ویژگی هستند و محصولات یا ساده هستند یا متغیر که محصولات متغیر دارای ویژگی هایی هستند که با انتخاب اونها توسط مشتری میتونه قیمت عوض شه و به طور کلی قابل انتخاب توسط مشتری هستند.
می خواستم دوستانی که تجربه طراحی و پیاده سازی این نوع فروشگاه رو دارند بهمون کمک کنند و بگن بهترین روش برای طراحی و پیاده سازی پایگاه داده این سیستم فروشگاهی که قراره با لاراول هم نوشته بشه چطوره؟
طراحی پایگاه داده در فروشگاه های اینترنتی به روش های متفاوتی انجام می شود ولی همواره باید سعی کنیم روشی را انتخاب کرده که کمترین میزان فضا از پایگاه داده را اشغال کند. این موردی که شما فرمودید مشابه ساختار فروشگاه ساز ووکامرس وردپرس می باشد ولی عملا می توانید با روش زیر پیاده سازی متنوع تری ارائه داده و خروجی مشابه ووکامرس دریافت کنید. (اما حجم خیلی کمتری از پایگاه داده اشغال می شود)
اگر شما در حال نوشتن یک سی ام اس اختصاصی فروشگاهی هستید یکی از روش های طراحی پایگاه داده فروشگاه اینترنتی می تواند به صورت زیر باشد:
جدول دسته بندی (categories)
این جدول شامل دسته بندی های تو در تو (سلسله مراتبی) می باشد. مشابه سایت روکسو
id // integer
title // varchar
parent_id // integer ---> برای دسته بندی های تو در تو
created_at // timestamp
جدول ویژگی ها (attributes)
این جدول شامل ویژگی هایی است که برای هر دسته بندی تعریف می شود. مثلا دسته بندی کفش شامل یک سری ویژگی مانند سایز، رنگ و ... است و هر یک از این ویژگی ها شامل یک سری مقادیر هستند. (این مورد به صورت کامل در دوره آموزش ساخت فروشگاه اینترنتی مشابه دیجی استایل در لاراول تدریس و پیاده سازی شده است)
id // integer
title // varchar
created_at // timestamp
حال باید یک جدول برای مقادیر ویژگی تعیین کنید.
جدول مقادیر ویژگی (attribute_values)
وظیفه این جدول نگهداری مقادیر ویژگی جدول attributes است (یعنی یک رابطه یک به چند با جدول attributes برقرار کرده است)
id // integer
attribute_id // integer ---> کلید خارجی مرتبط با جدول attributes
title // varchar
created_at // timestamp
سپس شما می توانید جدول ویژگی را به جدول categories (دسته بندی ها) ارتباط دهید. این ارتباط از نوع چند به چند می باشد (یعنی هر دسته بندی می تواند چندین ویژگی را به ارث ببرد و هر ویژگی می تواند به چندین دسته بندی مرتبط شود)
جدول میانی یا pivot ویژگی ها و دسته بندی ها (attribute_category)
این جدول برای ذخیره سازی ویژگی های هر دسته بندی مورد استفاده قرار می گیرد و به صورت زیر تعریف می شود:
attribute_id // integer ---> کلید خارجی که رابطه با جدول attributes دارد
category_id // integer ---> کلید خارجی که رابطه با جدول categories دارد
پس از انجام این کار کافیست شما جدول محصولات را به جدول دسته بندی متصل کنید.
جدول محصولات (products)
در این جدول یک رابطه بین محصولات و دسته بندی ها ایجاد می شود که هر دسته بندی از طرفی با یک سری ویژگی ارتباط دارد و هر ویژگی با یک سری مقادیر! البته بسته به نیاز خودتان می توانید این جدول را توسعه دهید ولی هدف ارائه کردن کلید خارجی category_id در جدول محصولات بود:
id // integer
category_id // integer ----> کلید خارجی که مرتبط با جدول categories
price // float
....
created_at // timestamp
با طراحی پایگاه داده فروشگاه اینترنتی خود، مشابه جداول بالا می توانید به ازای هر ویژگی که در دسته بندی ها تعیین می شود، محصولات خود را ویژگی دهید. البته لازم به ذکر است که در صورت نیاز می توانید یک واحد قیمت (price) به مقادیر ویژگی اضافه کرده که به قیمت نهایی یک محصول اضافه شود.
امیدوارم این راهنمایی مشکل شما را برطرف کرده باشید.