ورود

View Full Version : مشکل در طراحی پایگاه داده فروشگاه الکترونیک



hessammt
شنبه 09 خرداد 1394, 15:41 عصر
سلام !

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

حالا من نمیدونم برای هر گروه محصولم باید یک جدول طراحی کنم (مثلا اگر 20 گروه محصول دارم باید 20 جدول تعریف کنم که محصول اون گروه رو وارد کنم ؟!) یا اینکه راه حل دیگه ای وجود داره ؟ الان مثلا دیجی کالا برام خیلی جالبه هم دمپایی میفروشه هم موبایل، بعد اطلاعات اینها چجوری ذخیره میشه ! :لبخند:


ممنونم.

پ.ن: اگر تاپیک تکراری هست معذرت میخوام، گشتم پیدا نکردم ولی.

pezhvakco
شنبه 09 خرداد 1394, 20:23 عصر
رای هر گروه محصولم باید یک جدول طراحی کنم
1)=>
یک جدول داشته باشی برای سرگروه ها
یک جدول هم برای خود کالا ها که کد سرگروه در یک ستون اون ذخیره بشه و با جدول سرگروه در ارتباط باشه

2)=>
یک جدول باشه برای همه چی و در اون یک ستون باشه برای کد سرگروه و هر ردیف که کد نداشت یعنی سرگروه است و یا یه ستون باشه برای سطح چندم بودن این ردیف کالا

3)=>روش های خوبه دیگه

hessammt
یک شنبه 10 خرداد 1394, 07:45 صبح
سلام. ممنون دوست من، اما این جواب سوال من نبود...

tooraj_azizi_1035
یک شنبه 10 خرداد 1394, 08:33 صبح
سلام
شما یک درختواره از گروه بندی کالا ها داری که می تونی تمام این گروه ها و زیر شاخه های اونها رو در یک جدول ذخیره کنی و ارتباط زیر گروه و گروه ها رو با استفاده از فیلدی از نوع HierarchyId تعیین کنی و بعد در جدول کالا ID زیر گروه رو قرار بدی که این هم نوعش HierarchyId میشه.

hessammt
یک شنبه 10 خرداد 1394, 09:10 صبح
سلام. شاید من سوالم رو بد مطرح کردم ! :)

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

هر "محصولی" یک سری مشخصات داره. مثل "وزن، رنگ، اندازه" یا ... حالا این مشخصات برای محصولات مختلف متفاوت هست. مثلا باید برای موبایل نوع صفحه نمایش درج بشه، برای کوله پشتی تعداد جیب ها مثلا !! :)

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

خودم به این نتیجه رسیدم که مثلا جدول محصولاتم 30 فیلد جهت مشخصات قرار بدم که مثلا بیام نام گذاری کنم product_spec_a بعد خاصیت null رو allow کنم (که محصولاتی که کلا مثلا 5 تا مشخصه دارند هم ثبت بشن)، برای هر محصول اطلاعات مربوط به همون محصول رو ذخیره کنم، در صفحه وب هم حالا با مثلا اسمهای مختلف اینا رو جدا کنم از هم دیگه...

نمیدونم باز سوالم رو درست مطرح کردم یا نه، ولی بهرحال نحوه ارتباط محصول با گروه محصول مشکل من نیست، مشکل ثبت مشخصات محصولات مختلف هست که فیلدهاشون با هم فرق میکنه.

ممنون از جواب بهرحال. مرسی

SabaSabouhi
یک شنبه 10 خرداد 1394, 10:06 صبح
سلام
دوست عزیز، راه حل وجود داره. یه کم پیاده‌سازیش ممکنه سخت به نظر برسه، اما کاملاً عملی هست.
شما نیاز داری که در کنار جدول اصلی که اطلاعات اصلی مانند Id، نام، نوع محصول، شخص ارائه کننده و وضعیت ( ستون‌های مشترک ) رو نگهداری می‌کنه
اطلاعات اضافی رو به صورت MetaData نگهداری کنی.
برای این کار یه جدول نیاز داری که مشخصات ستون رو توش نگهداری کنی. مثلاً ستون «تعداد سیم‌کارت» برای محصولی از نوع «موبایل» و یا ابعاد برای کالایی
از نوع «میز تحریر» به علاوه‌ی نوع داده‌ی قابل ذخیره سازی مثل Integer, Date, Text و غیره.
و یک جدول هم نیاز داری که مقادیر رو توش نگهداری کنی که نیاز به Id, کلید خارجی به جدول کالاها، کلید خارجی به جدول «نوع مقادیر» ( که در خطوط بالا
توضیح دادم ) و یک ستون هم برای مقدار از نوع رشته ( که برای ساده‌تر شدن می‌شه از چند ستون برای مقادیر «تاریخ»، «رشته» و «عدد» هم استفاده کرد )

زحمت اضافه‌ای که باید بکشی ذخیره سازی اطلاعات، و بازیابی اون‌ها هست که از حالت عادی کمی بیشتر کار می‌بره. ( هر چند که ارزشش رو داره )
من از این روش بسیار استفاده می‌کنم.

یه روش دیگه نگهداری اطلاعات اضافی به صورت JSON هست که غیر از Sql Server 2016 که امکان استفاده‌ی مستقیم JSON رو توش پیش بینی کرده، شما
می‌تونی یه ستون از جنس ( varchar( max بگیری و به صورت JSON هر چی اطلاعات لازم داری رو توش ذخیره کنی.

این دو روش هر کدوم نقاط قوت و ضعف نسبت به هم دارن، که باید با تجربه پیدا کنی که کدوم بیشتر به دردت می‌خوره.
انتخاب من MetaData هست چون در سطح Sql می‌تونم به راحتی به فیلد‌های مورد نظرم دسترسی داشته باشم. اما ممکنه
سایر دوستان، نظر دیگه‌ای داشته باشن.

صبا صبوحی

IMANAZADI
چهارشنبه 13 خرداد 1394, 07:14 صبح
با سلام
میشه همین ساختار بالا رو که بیان فرمودید در قالب یک فایل مثال زحمت بکشید و بزارید
چون منم دقیقا همین مشکل رو داشتم و قبل از این دوست عزیزمون مطرح کرده بودم و جواب درستی نگرفته بودم
این مثال حیلی میتونه کمک کنه

IMANAZADI
پنج شنبه 14 خرداد 1394, 08:31 صبح
دوست گرامی چی شد

stackprogramer
پنج شنبه 14 خرداد 1394, 11:23 صبح
دوست عزیز اگه بعد ها وارد افزونه نویسی برای سی ام اس های معروفی مثل جولا،ورد پرس ،بشی می بینی کامپوننت های فروشگاهی که طراحی کردند،برا اساس مدل MVCطراحی می شه ،که می یاد،برای فروش کالا،یک چیز های پایه مثل ای دی،نوع، دسته،قیمت،تاریخ،شرکت سازنده،.....که برای مشتری ها مهم است می زاره ،اما یک تگ متا دیتا برای توصیف اون هم می گذاره ،این بهترین روش طراحی هست،

IMANAZADI
جمعه 15 خرداد 1394, 06:13 صبح
دوست عزیز میشه کاملتر توضیح بدید
ممنون میشم

IMANAZADI
سه شنبه 19 خرداد 1394, 13:38 عصر
دوست عزیز اگه بعد ها وارد افزونه نویسی برای سی ام اس های معروفی مثل جولا،ورد پرس ،بشی می بینی کامپوننت های فروشگاهی که طراحی کردند،برا اساس مدل MVCطراحی می شه ،که می یاد،برای فروش کالا،یک چیز های پایه مثل ای دی،نوع، دسته،قیمت،تاریخ،شرکت سازنده،.....که برای مشتری ها مهم است می زاره ،اما یک تگ متا دیتا برای توصیف اون هم می گذاره ،این بهترین روش طراحی هست،

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

reza_ali202000
سه شنبه 19 خرداد 1394, 19:45 عصر
دوست عزیز اونایی که مشترک هستن مثل نام و کد و قیمت که ثابت میزاری. اونایی هم که غیر مشترک هستن میای بیشترین خصوصیات رو در میاری به اندازه اون فیلد خالی در نظر میگیری. مثلا دمپایی 20 تا خصوصیت داره گوشی 5 تا. پس 20تا فیلد خالی توی کالا پیش بینی میکنی. حالا زمانی که میخای اطلاعات گروه رو ثبت کنی اسم فیلدا هم ثبت میکنی. مثلا رنگ دمپایی یا مثلا سایز دمپایی.
(حالا یه خورده برنامه نویسی!)حالا برا نمایش میای به تعداد فیلدایی که توی گروهت هس لیبل میسازی و میزاری قبل از تکس باکست(البته به صورت شناور و کد نویسی) خوب به همین راحتی پیاده سازی میشه!

nazanin_asadi_1
سه شنبه 19 خرداد 1394, 20:23 عصر
بحث خوبی رو شروع کردی روشهای زیادی وجود داره هر کسی بسته به سلیقه خودش روشی رو که نیاز داره رو پیاده سازی میکنه

1- همه داده های مربوط به کالاها رو توی یه رکورد ذخیره کن (اصلا جالب نیست )
2- پیشنهاد مطرح شده در پس 6 هم جالبه ولی وقتی پای جستجو و مرتب کردن بر اساس مشخصات واسه هر محصول میاد وسط این روش هم جواب نمیده
3- روشی که خودم استفاده کردم اینه که از چند جدول استفاده میکنم یکی عنوان ها رو ذخیره میکنه یکی پارامترها رو یکی هم مقدارهای مربوط به پارامترها رو

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

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

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

مثلا برای ثبت گوشی دیگه مثلا وزن رو نیاره یا برای ثبت لوازم بهداشتی دیگه رزولیشن و ... رو نیاره

mahmood3d
یک شنبه 28 تیر 1394, 11:25 صبح
با سلام و عرض ادب
من در حال طراحی یک فروشگاه جامع هستم و دقیقا به این مشکل برخوردم. خیلی در موردش فکر کردم. حتی اومده بودم یه تاپیک بسازم و از دوستان هم مشورت بگیرم که به این تاپیک برخوردم و گفتم همینجا بحث کنیم زودتر به نتیجه می رسیم. :لبخندساده:
همه روش هایی که دوستان پیشنهاد دادن خیلی خوبه فقط یه چیزی رو در نظر نگرفتین و اون مقایسه کالا هست که در خیلی از روش های پیشنهادی نمیشه مقایسه رو انجام داد چون هیچ چیز مشترکی بین خصوصیات ذخیره شده وجود نداره که بتونیم مقایسه رو انجام بدیم. البته لازم به ذکره که روش پیشنهادی نازنین خانم اسدی کمی بهتره و فکر کنم این مورد رو هم بشه توش گنجوند. فقط میخواستم از خانم اسدی خواهش کنم که روششون رو کمی باز تر با مثال توضیح بدن که برای دوستان و مخصوصا خودم بیشتر جا بیفته.
ممنون

ikallam
شنبه 31 مرداد 1394, 22:06 عصر
سلام فکر نکنم واسه مقایسه لازم نباشه فیلد ها برابر باشه روش مقایسه توی فروشگاه ها که من دیدم تا حالا به این صورته که کاربر روی دکمه اضافه به مقایسه کلیک میکنه بعد کد (id) اون کالا توی یه سیشن ذخیره میشه بعد کاربر میاد روی دکمه یه کالای دیگه اضافه به مقایسه رو کلیک میکنه و چک میشه اگه سیشن قبلا مقداری داشت (یعنی این دومین کلیک کاربر بود ) توی یه صفحه دیگه اطلاعات این دو محصول کنار هم لیست میشه کاربر با چشم میتونه تفاوت ها رو ببینه -

mahmood3d
دوشنبه 02 شهریور 1394, 21:05 عصر
برای اینکه اطلاعات محصول کنار هم لیست بشه نیاز هست که مشخصات مشابه داشته باشه.
تو حالتی که شما می فرمایین این سؤال مطرح میشه که 2 تا محصول کنار هم چیاش باهم مقایسه میشه؟

pbm_soy
سه شنبه 03 شهریور 1394, 00:52 صبح
بحث خوبی عنوان شده ولی
بهتر بود دوستان بجای نوشتن توضیحات ساختار جداولشون را اینجا میگذاشتن خوب میشد و فهمیدنش هم راحتتر بود
اینطوری که نوشتن باید بادقت نوشته ها را بخونی تا بفهمی واقعا منظور دوستان چیست؟!

میخواستم روش خودم را بنویسم ولی چون با گوشی سایت را باز کردم نمیتوانم جداول را اینجا ترسیم کنم ولی فکر میکنم خیلی شبیه روشهای دوستان که در پست ۶ و ۱۳ باشد

ولی برای دادن مثال حدود ۱۰ سال پیش نرم افزارهای اکانتینگ برای ispها بحث مهمی بود در این نرم افزار رایگانی به اسم nttac pluse وجود داشت که تقریبا ۵۰٪ از شرکتها از آن استفاده میکردند خوبی آن این بود که یک موتور اصلی داشت که راحت میشد براش دیتابیس معرفی کرد و سپس برای آن یک پوسته وب نوشت
دلیل اصلی که این مثال را زدم این بود که این نرم افزار با اینکه متن باز نبود میشد بطور کامل بومی سازیش کرد بخاطر داشتن سیستم بانک اطلاعاتی جالبی که داشت خیلی راحت میشد در آن رکوردهایی با تعداد و نوع فیلدهای متغییر تعریف کرد
متاسفانه ساختار دیتابیس آن خاطر نیست ولی میتوانید آنرا دانلود کنید و ساختار دیتابیسش را مطالعه کنید که مطمینم جواب سوالات را خواهید گرفت
در ضمن دیتابیس اکسس و sql server داشت حتی یادم میاد که راهنمای آنرا بچه های persian networks ترجمه کرده بودند

ikallam
سه شنبه 03 شهریور 1394, 21:36 عصر
بله درست میفرمایین (من اشتباه فکر میکردم )ولی درکل فیلد ها شبیه هم اند چون دو محصول از یک ساختار با هم مقایسه میشن نه دو محصول متفاوت - مثلا موبایل با یه نوع موبایل دیگه - نمیشه یخچال رو با موبایل مقایسه کرد - پس در این صورت فیلد ها شبیه هم اند دیگه فقط مقادیر متفاوته

ikallam
سه شنبه 03 شهریور 1394, 22:00 عصر
چیزی که من واسه تحلیل یه دیتابیس فروشگاه تونستم در بیارم این جوریه

جدول محصولات
1- کد محصول (auto)
2- نام محصول
... و فیلد های مشترک مثل وزن و ابعاد و رنگ که توی همه محصولات است

جدول گروه خصوصیات
1-کد گروه
2-نام گروه

جدول خصوصیات
1- کد خصوصیت
2-کد گروه(از جدول گروه خصوصیات)
3-نام خصوصیت

جدول مشخصات محصولات
1-کد مشخصه (auto)
2-کد محصول (از جدول محصولات)
3-کد خصوصیت (از جدول خصوصیات )
4-مقدار خصوصیت




- یه مثال -
محصول با کد محصول 100 و نام موبایل glx :لبخند:
توی گروه خصوصیات قبلا تعریف کردیم کد گروه 1 نام گروه ویژگی های عمومی
توی جدول خصوصیات کد خصوصیات 5 کد گروه 1(همون گروه عمومی جدول خصوصیات) نام خصوصیت راحت تو جیب جا میشه ؟؟
توی جدول مشخصات محصولات - کد مشخصه 3 محصول با کد 100 (نامش موبایل glx) کد خصوصیت 5(خصوصیت راحت تو جیب جا میشه )
مقدار خصوصیت بله

حال میتونیم دقیقا مثلا دیجی کالا محصولات رو به این صورت نشون بدیم
ویژگی های عمومی
نام خصوصیت - مقدار خصوصیت
.
.
.
پردازنده
میزان کش - 3گیگ
تعداد هسته 8 هسته

تحلیل تموم شد کامل با دیاگرام ها اپلود میکنم دوستان مشکلاتش رو بگیرن

jojoyejojo
شنبه 25 مهر 1394, 20:26 عصر
چیزی که من واسه تحلیل یه دیتابیس فروشگاه تونستم در بیارم این جوریه

جدول محصولات
1- کد محصول (auto)
2- نام محصول
... و فیلد های مشترک مثل وزن و ابعاد و رنگ که توی همه محصولات است

جدول گروه خصوصیات
1-کد گروه
2-نام گروه

جدول خصوصیات
1- کد خصوصیت
2-کد گروه(از جدول گروه خصوصیات)
3-نام خصوصیت

جدول مشخصات محصولات
1-کد مشخصه (auto)
2-کد محصول (از جدول محصولات)
3-کد خصوصیت (از جدول خصوصیات )
4-مقدار خصوصیت




- یه مثال -
محصول با کد محصول 100 و نام موبایل glx :لبخند:
توی گروه خصوصیات قبلا تعریف کردیم کد گروه 1 نام گروه ویژگی های عمومی
توی جدول خصوصیات کد خصوصیات 5 کد گروه 1(همون گروه عمومی جدول خصوصیات) نام خصوصیت راحت تو جیب جا میشه ؟؟
توی جدول مشخصات محصولات - کد مشخصه 3 محصول با کد 100 (نامش موبایل glx) کد خصوصیت 5(خصوصیت راحت تو جیب جا میشه )
مقدار خصوصیت بله

حال میتونیم دقیقا مثلا دیجی کالا محصولات رو به این صورت نشون بدیم
ویژگی های عمومی
نام خصوصیت - مقدار خصوصیت
.
.
.
پردازنده
میزان کش - 3گیگ
تعداد هسته 8 هسته

تحلیل تموم شد کامل با دیاگرام ها اپلود میکنم دوستان مشکلاتش رو بگیرن






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

jaykob
سه شنبه 30 آبان 1396, 17:49 عصر
سلام

درسته تاپیک قدیمی هستش ولی اگر تحلیل تکمیل شده و می تونید در این زمینه کمک بکنید ممنون می شم اطلاعات لازم رو در اینجا قرار بدید

با تشکر