PDA

View Full Version : حرفه ای: نحو گروه بندی محصولات بصورت چند مرحله ای مثل دیجیکالا یا 5040



peyman_abdollahy
چهارشنبه 27 خرداد 1394, 20:28 عصر
سلام
می خواستم سیستم گروه بندی محصولات بصورت n مرحله ای ایجاد کنم ، تا اونجایی که تحقیق کردم یکی از روش هاش ایجاد لیست مجاورت هست که به این صورت پیاده میشه :



parent_id

category_name

id



NULL یا 0

محصولات غذایی

1



NULL

محصولات دیجیتال

2



1

تنقلات

3



1

نوشیدنی

4



3

آدامس و شکلات

5



2

موبایل

6



2

تلویزیون

7














می خوام این امکان هم وجود داشته باشه که یک محصول زیر مجموعه چند تا گروه هم باشه .
یک جدول برا محصولات داریم



product-name

id




آدامس خرسی

1




موبایل 2

2




تلویزیون فلان

3




بیلی

4




و یه حدول دیگه هم که میاد آی دی محصول و آخرین آی دیه گروه نکه میداره.
مسکل اینه که میخوام برای هر گروه جدول ویژگی های مخصوص به خودشو داشتم ، مثلا مشخصات مواد غذایی با دیجیتال نمی تونه یکی باشه . چطوری باید این مشکلو حل کنم.

farzad-kh
پنج شنبه 28 خرداد 1394, 10:59 صبح
سلام یه روش که به ذهن من اومد مثه کار فرم ساز میمونه یعنی تو بیای وقتی که یه گروه رو میسازی اطلاعات کلیشو مثه اسم و یا آیدی مادر رو توی یه جدول ذخیره کنی حالا مثلا توی فرم ساز اینکارو میکنن : یه جدول جدید ساخته میشه همنام با اسم انگلیسیه گروه و ستونهاش میشن ویژگی های اون محصول که مثلا تو موقع تعریف نوع اونا رو هم انتخاب کردی .... اینجوری جدول هایی داری با ستونهای مختلف که هرستونش یه ویژگیه گروهته... موقع نمایش هم میتونی لیست ستون ها رو بدست بیاری و اونا رو به ترتیبی که توی دیتابیس ذخیره شدن نشون بدی ... این ایده من بود که یه فرمساز هستش

Keramatifar
چهارشنبه 03 تیر 1394, 12:59 عصر
دوست عزیز
برای اینکار دقیقا استاندارد طراحی دیتابیس وجود دارد
مکانیزم Hierarchy دقیقا برای این منظور ارائه شده است

در این روش ما یک فیلد به نام parentID به جدول اضافه می کنیم که با خود جدول ارتباط One To Many دارد
معمولا این نوع جداول توسط کامپوننت TreeView (مثلا: در ویژوال استودیو مایکروسافت برای دات نت فریمورک وجود دارد) نمایش داده می شود
چند سال پیش بنده برای PHP هم کامپوننت مشابهی نوشتم :

کامپوننت Treeview برای PHP (http://barnamenevis.org/showthread.php?495890-Class-%D9%87%D8%A7-%D9%88-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7-%D9%88-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9-%D9%87%D8%A7%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D8%AF%D8%B1-PHP&p=2224913&viewfull=1#post2224913)

Unique
پنج شنبه 04 تیر 1394, 16:36 عصر
اینجا (http://www.geekfarsi.com/%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D9%BE%DB%8C%D9%85%D8%A7%DB%8C%D8%B4-%D9%88-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%AF%D8%A7%D8%AF%D9%87%E2%80%8C%D9%87%D8%A7-%D8%A8%D8%A7-%D9%81%D8%B1%D9%85%D8%AA/383) با Source Code کامل توضیح داده

peyman_abdollahy
سه شنبه 30 تیر 1394, 07:35 صبح
بله با این مدل طراحی داشتم ، اما سوال من بیشتر این بود که چطور می تونیم برای هر کدوم از این دسته ها ویژگی های متفاوت داشته باشیم. مثلا محصولاتی که زیر دسته موبایل هستند ویژگی ها ی متفاوت دارند با محصولات زیر دسته لباس.
حالا جدا از این سوال بالا ، می خواستم همین مدل ساده سلسله مراتبو اگر بخوایم تبدیل به ارتباط چند به چند کنیم چه باید بکنیم؟ مثلا یک پست زیر دسته چند کنو یا کتگوری باشه، در این صورت فکر می کنم باید 3 تا جدول داشته باشم

Unique
سه شنبه 30 تیر 1394, 12:49 عصر
چطور می تونیم برای هر کدوم از این دسته ها ویژگی های متفاوت داشته باشیم. مثلا محصولاتی که زیر دسته موبایل هستند ویژگی ها ی متفاوت دارند با محصولات زیر دسته لباس.
بستگی به چگونگی پیاد هسازی شما داره ،‌ میشه برای هر گروه اصلی یک جدول ویژگیها داشت میشه هم از serialize کردن استفاده کرد و همه ویژگی ها را به صورت متغیر برای هر دسته ریخت توی یک فیلد اما من داشتن جدول برای هر دسته اصلی را ترجیح میدم


می خواستم همین مدل ساده سلسله مراتبو اگر بخوایم تبدیل به ارتباط چند به چند کنیم چه باید بکنیم؟ مثلا یک پست زیر دسته چند کنو یا کتگوری باشه، در این صورت فکر می کنم باید 3 تا جدول داشته باشم

چرا سه تا جدول ؟ اتفاقا با ۲ تا جدول راحت انجام میشه ، یکی کد و نام دسته ها را نگه میداره و یکی دیگه کد دسته و کد والد را نگه میداره اینطوری هر دسته میتونه بی نهایت والد داشته باشه .

blue.web9
سه شنبه 30 تیر 1394, 14:43 عصر
چرا سه تا جدول ؟ اتفاقا با ۲ تا جدول راحت انجام میشه ، یکی کد و نام دسته ها را نگه میداره و یکی دیگه کد دسته و کد والد را نگه میداره اینطوری هر دسته میتونه بی نهایت والد داشته باشه .
میشه در مورد این بیشتر توضیح بدید ،‌برای ارتباط n به n از جدول واسط نباید استفاده کرد ؟
اگه امکان داره در مورد این که هر رکورد چند والد داشته بیشتر توضیح میدید ؟

peyman_abdollahy
سه شنبه 30 تیر 1394, 17:23 عصر
بستگی به چگونگی پیاد هسازی شما داره ،‌ میشه برای هر گروه اصلی یک جدول ویژگیها داشت میشه هم از serialize کردن استفاده کرد و همه ویژگی ها را به صورت متغیر برای هر دسته ریخت توی یک فیلد اما من داشتن جدول برای هر دسته اصلی را ترجیح میدم



چرا سه تا جدول ؟ اتفاقا با ۲ تا جدول راحت انجام میشه ، یکی کد و نام دسته ها را نگه میداره و یکی دیگه کد دسته و کد والد را نگه میداره اینطوری هر دسته میتونه بی نهایت والد داشته باشه .

میشه برای هر گروه اصلی یک جدول ویژگی ها داشت ، بله باید داشت اما کجا نگه داریم نام جدولو؟ (احتمالا تو جدول اول که آی دی پدر نگه داری میشه). حالا یک سری سوال پیش میاد که بهتر پیاده سازی انجام بدم تا مشکلات دوباره مشخص بشه.

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

Unique
سه شنبه 30 تیر 1394, 23:24 عصر
میشه در مورد این بیشتر توضیح بدید ،‌برای ارتباط n به n از جدول واسط نباید استفاده کرد ؟
اگه امکان داره در مورد این که هر رکورد چند والد داشته بیشتر توضیح میدید ؟

امیدوارم شما مثل آقا پیمان اشتباه متوجه حرف من نشده باشین. من داشتم در مورد این حرف میزدم که چطور میشه گروه هایی داشت که جند والد به جای یکی داشته باشن و اصلا محصول را دخالت ندادم. برای حالتی که توضیح دادم همون دو جدول کفایت میکنه. اما اگه منظورتون چند والد داشتن محصول هست به شرطی که هر گروه یک والد داشته باشه و هر محصول چند والد نیاز به ۳ جدول و اگر هر گروه و هر محصول چندین والد داشته باشن ۴ جدول ! البته من کمتر لازم شده برای یک محصول و یک گروه چند دسته داشته باشم.



میشه برای هر گروه اصلی یک جدول ویژگی ها داشت ، بله باید داشت اما کجا نگه داریم نام جدولو؟ (احتمالا تو جدول اول که آی دی پدر نگه داری میشه). حالا یک سری سوال پیش میاد که بهتر پیاده سازی انجام بدم تا مشکلات دوباره مشخص بشه.

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


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

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