تالار گفتمان nCIS.ir

نسخه‌ی کامل: طراحی دیتابیس پوشاک
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
صفحات: 1 2
سلام دوستان. اول اینکه چون بخش طراحی دیتابیس نداشتیم مجبور شدم اینجا پست بزارم.
می خواستم یه فروشگاه رو پیاده سازی کنم از دوستان کمک در رابطه با طراحی بانک اطلاعاتی می خواستم. محصولات این فروشگاه شامل انواع پوشاک - زیور آلات - کیف و کفش - برخی محصولات آرایشی - اسباب بازی 
اما پوشاک شامل ویژگی های زیر هست. البته در آینده نیز تعریف بوتیک به این قسمت افزوده میشه
رنگ های متفاوت:ممکنه محصول تک رنگ و یا شامل چندین رنگ باشه که معمولا کاربر از اسامی رنگ ها در اون استفاده می کنه مثلا گل آبی یا سیاه و سفید طرح دار که در آخری در نتایج جستجو نسبت به رنگ سیاه و سفید آورده میشه.
سایزهای متفاوت: سایز های یه محصول ممکنه عدد باشه مثلا 30 -32 -34-36-38 یا larg - xlarg , ...
تعداد در هر سایز :در هر یک از سایز ها موجودی متفاوت هست. مثلا شلوار با رنگ سفید لارج تعداد 10 تا و شلوار با رنگ سفید لارج تعداد 3 تا 
وزن: برای بعضی از محصولات در وزن مهم هست البته توجه کنید که با توجه به سایزشون
جنس محصولات:برای محصول شلوار یه جنس بیشتر نیست اما برای محصول کت دامن که جنس کت با جنس دامن متفاوت هست 2 جنس متفاوت داریم.
قیمت: در حال حاضر قیمت یه محصول در سایزها و رنگ های مختلف یکسان هست.
و ویژگی هایی مثل برند - پوشاک بهاره ، تابستانه ، ... - زمان تحویل کالا - کشور تولید کننده و ... .
برای تمام محصولات از هر نوعی(پوشاک - زیور آلات و ...) که باشند میشه رنگ تعریف کرد
جستجو بر روی رنگ محصولات - سایز محصولات - عنوان محصولات - 

واقعا در طراحی این دیتابیس مشکل دارم اگه دوستان می تونن کمکی بدن ممنون میشم.
از جناب شهرکی هم واقعا کمک می خوام
اگه بشه یه طراحی کامل با هم داشته باشیم خیلی از مشکلات دوستان توی این تاپیک روشن میشه.
میتونید برای اینکه انعطاف پذیری رو به حداکثر برسونید، برای هرکدوم از مواردی که مقادیر مشخصی دارن (مثل رنگ) و Scalar نیستن (مثل تعداد) یه جدول جداگانه بسازین. مثال:
colors: id, name (blue, red, cyan, ...)
themes: id, name (bwstripe, snowwhite, ...)
themecolors: theme_id, color_id (used for n..n relations between themes and colors)
sizes: id, name (30, xlarge, medium, ...)
materials: id, name (jean, satin, cotton, ...)
brands: id, name (adidas, puma, ...)
...
products: id, theme_id, size_id, material_id, brand_id, country_id, quantity, price, ...

این جداول فقط برای خود محصولات هست. اونهایی که پسوند id_ دارن، کلید خارجی هستن به جدولی که قبل از پسوند مشخص شده. البته یه سری جدول دیگه هم برای مدیریت آمار فروش و سفارشات لازم دارین که الان موضوع بحث نیست.
ممنون از جوابتون، 
1- اما اگر توجه کنید اینطوری برای هر سایز در جدول محصولات برای محصول خاصی چند رکورد خواهیم داشت.
2- چطور اطلاعات زیور آلات و یا اسباب بازی ها رو توی این جدول ذخیره کنم یا اینکه قراره توی جداول جداگانه ثبت بشه؟
3- یه مطلب دیگه ای که ازم خواسته تعریف دسته بندی های جدید برای محصولات هست.
4- برای سازماندهی بهتر محصولات بایستی بکسری دسته بندی داشته باشیم مثلا برای پوشاک
 آقایان - شلوار - (جین - پارچه ای ) 
خانم ها - شلوار -(جین - ...)
1- خوب داشته باشین، اشکالش چیه؟ میتونید حتی محصولات رو هم جدا کنید و برای سایزهای مختلف، یک جدول جداگانه بزنید و product_id رو ثبت کنید.
2- میتونید برای محصولاتی که سایزبندی و... ندارن، فیلدهای مربوطه رو Null بگذارین.
3- میشه جدول دسته بندی رو هم اضافه کرد و توی جدول محصولات، فیلد category_id گذاشت.
4- میتونید یه جدول واسط دیگه برای ارتباط n..n بین محصولات و دسته بندیها هم درنظر بگیرین.
تشکر از پیگیریتون ولی هنوز به یک طراحی خوب نرسیدم
1-
اگر قرار باشه اطلاعات هر سایز توی جدول محصولات قرار بگیره و هر محصول دارای چند رکورد در جدول محصولات باشه پس فیلد هایی مثل- title - date - shotDesc - longDesc  -sex و غیره کجا ذخیره بشه. اگر توی همون جدول باشه که باید در هر سطر دوباره تکرار بشه؟
2-
نقل قول:4- میتونید یه جدول واسط دیگه برای ارتباط n..n بین محصولات و دسته بندیها هم درنظر بگیرین.
چه نیازی به این جدول واسط هست؟
3-
آیا برای تفکیک محصولات بخش پوشاک با محصولات بخش زیور آلات فیلد جدا در نظر بگیرم یا همان فیلد دسته بندی ها که با جدول دسته بندی در ارتباط هست و دارای فیلد parent_id هست کافیه ؟
4-
جدول محصولات با جدول materials ، ارتباط چند به چند داره دیگه. گفتیم یه محصول مثل کت دامن که کت از یک جنس هست و دامن از جنس دیگری.
5-
میشه جداول size - category - brand - materials -colors رو یکی کرد ؟ اشکالاتش و یا سختی هاش در پرسجو ها چی می تونه باشه؟
6-برای اضافه کردن یه خصوصیت به جدول محصولات و یا یه گروه خاص مثلا زیور آلات چه پیش نهادی دارید
با تشکر از همه دوستان
{با توجه به یکسری مشکلات هنوز نمی تونم بدرستی یه پست در سایت با عکس قرار بدم تا دیاگرام رو باهم بررسی کنیم}
1- ببینید، اگه حجم اینها زیاد نیست (مثل «مرد»، «زن» و...) بهتره همون فیلد معمولی بگذارین چون قراردادن اینها توی یه جدول جداگانه و مدام Relation زدن برای پیداکردن متن، برعکس باعث کاهش کارآیی میشه. مواردی مثل longDesc و... که گفتین هم اگه میخواین تکرار نشه، یکبار توی جدول محصول ثبت کنید و بعد برای هر نوعی که از محصول دارین، فقط id اون رو توی جداول ارتباطات استفاده کنید.

2- برای اینکه ممکنه یه محصول توی چند دسته باشه و یه دسته هم میتونه چند محصول داشته باشه. اگه چنین رابطه ای ندارین، فقط قراردادن category_id توی جدول محصولات کفایت میکنه.

3- بنظرم همون دسته بندی ها با کمک parent_id کفایت میکنه.

4- خوب باید یه جدول واسط برای ارتباط چند به چند بینشون بگذارین.

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

6- اگه اون خصوصیات فقط جنبه توضیحی دارن، میتونید یه جدول داشته باشین برای اطلاعات جانبی که بصورت id, product_id, attribute, value هست و ازطریق اون مشخص کنید که هر attribute از یه محصول میتونه چه مقادیری داشته باشه. البته اگه بخواین کلاً گروه خصوصیات برای محصولات مختلف داشته باشین، اونوقت باز باید یه جدول دیگه درنظر بگیرین برای خصوصیات و یه جدول هم برای ارتباط چند به چند بینشون اضافه کنید.

دقت کنید که در نگاه اول ممکنه این جداول اضافه دست و پاگیر بنظر بیان ولی مطمئن باشین در آینده، ساختار فوق العاده انعطاف پذیری به برنامه شما میدن. از زیاد شدن جدولها (اگه منطقی باشه) نترسین.
نقل قول:ببینید، اگه حجم اینها زیاد نیست (مثل «مرد»، «زن» و...) بهتره همون فیلد معمولی بگذارین چون قراردادن اینها توی یه جدول جداگانه و مدام Relation زدن برای پیداکردن متن، برعکس باعث کاهش کارآیی میشه. مواردی مثل longDesc و... که گفتین هم اگه میخواین تکرار نشه، یکبار توی جدول محصول ثبت کنید و بعد برای هر نوعی که از محصول دارین، فقط id اون رو توی جداول ارتباطات استفاده کنید.
میشه با چند رکورد اطلاعاتی مثال بزنید هنوز نمی دونم قراره دو جدول داشه باشیم یا یکی برای محصولات.  و اینکه اگه چند رکورد اطلاعات یه محصول رو در جدول محصولات نگه داره اون وقت نیاز داریم یه فیلد اضافی که اینها رو بهم ربط بده البته اگر درست متوجه شده باشم. 

کل فیلد های لازم برای یه محصول از نوع پوشاک رو هم یه نگاه بندازید

shops_id : کد فروشگاه
cat_id : دسته بندی محصول
theme_id- size_id-
 - title- shortDesc - longDesc- 
auctionee: نمایش محصول در بخش حراجی
count - weight
price : قیمت فعلی
priceBefor : قیمت قبلی
sex: آقا - خانم - بچه گانه دختر - بچه گانه پسر
date: تاریخ نمایش محصول در سایت
dateEnd: تاریخ پایان نمایش در سایت
group : بهاره - تابستانه - پاییزه - زمستانه - تمام فصول
deliveryTime : زمان تحویل کالا
image :آدرس عکس محصول
limitOrder : محدودیت سفارش
countSale : تعداد فروخته شده
point : نمره کاربران به محصول
show : فعال یا غیر فعال بودن محصول
del: محصول حذف شده یا نه
فیلد های جنس - کشور تولید کننده و برند بخاطر ارتباط چند به چند بایستی در جدول دیگری ذخیره بشه
بازم ممنون از همه دوستان بویژه استاد شهرکی
بنظر من چون از یه محصول، مدلهای مختلفی دارین، بهتره اسم محصولات رو توی یه جدول جدا بگذارین و بعد یه جدول هم طراحی کنید برای انبار که موجودی رو مدیریت میکنه. براتون یه نمونه میگذارم:
RELATIONS       TABLE NAME
                    FIELD       SAMPLE VALUES
                =======================================
                colors
        ┌-----------id          1, 2, 3, 4
        |           name        blue, red, black, white
        |       =======================================
        |       themes
    ┌---┼---┬-------id          1, 2
    |   |   |       name        bwstripe, snowwhite
    |   |   |   =======================================
    |   |   |   themcolors
    |   |   └-------theme_id    1
    |   └-----------color_id    3, 4
    |           sizes
┌---┼---------------id          1, 2, 3
|   |               name        30, xlarge, medium
|   |           =======================================
|   |           materials
|   |               id          1, 2
|   |               name        jean, cotton
|   |           =======================================
|   |           brands
|   |               id          1, 2
|   |               name        adidas, puma
|   |           =======================================
|   |           categories
|   |   ┌---┬-------id          1, 2, 3
|   |   |   |       name        clothes, jewels, shirt
|   |   |   └-------parent_id   NULL, NULL, 1
|   |   |       =======================================
|   |   |       products
|   |   |   ┌-------id          1
|   |   └---┼-------category_id 3
|   |       |       name        T-Shirt
|   |       |   =======================================
|   |       |   store
|   |       |       id          1, 2, 3
|   |       └-------product_id  1, 1, 1
|   └---------------theme_id    1, 2, 1
└-------------------size_id     2, 2, 3
                    sex         man, woman, girl
                    title       WT-Shirt, ...
                    short_desc  wtshirt, ...
                    long_desc   White T-Shirt, ...
                    price_new   1000, 1500, 5000
                    price_old   1500, 2000, 6000
                    quantity    30, 7, 3
البته من همه فیلدها رو نگذاشتم چون خیلی طولانی میشد. خودتون دیگه باتوجه به این توضیحات باید بتونین کاملش کنین.
جناب شهرکی واقعا از وقتی که گذاشتید تا آخرین پست این تاپیک رو ارسال کنید ممنونم.
هنوز برای من روشن نشده که چرا فیلد های sex - longDesc - shortDesc  ویکسری فیلد های دیگه که برای هر محصول فقط یه بار بایستی ثبت بشه چند بار در جدول store  ذخیره کنیم.
یه شکل ضمیمه کردم که نحوه نمایش لیستی محصولات رو نمایش می ده به همراه "الگوی رنگ" دقیقه چیزی که می خوام طراحی کنم چیزی شبیه به این لینک هست
http://www.hm.com/gb/products/men
وقتی قراره محصولات رو به شکل لیستی نمایش بدیم پس احتیاج به چندتا join  داریم که یکیش برای گرفتن shorDesc ، price - title - image هست پس بهتره این ها در همان جدول product باشه دیگه چه احتیاجی هست اونها رو در جدول دیگری قرار بدیم تا join بزنیم.
کد:
RELATIONS   TABLE NAME
                FIELD       SAMPLE VALUES
            =======================================
            categories
    ┌---┬-------id          1, 2, 3, 4
    |   |       name        pushak, man, woman, shirt, zivarAlat
    |   └-------parent_id   NULL, 1, 1, 2, NULL
    |       =======================================
    |         products
    |   ┌-------id          1
    └---┼-------category_id 3
        |       product_barnd_id
        |       product_materials_id
        |       product_country_id
        |       title       T-Shirt 2015
        |       sex            man
        |       short_desc  wtshirt
        |       long_desc   White T-Shirt
        |       price_new   1000
        |       price_old   1500 
        |       ...
        |   =======================================
        |   store
        |       id          1, 2, 3
        └-------product_id  1, 1, 1
                theme_id    1, 2, 1
                size_id     2, 2, 3
                weight        100g
                quantity    30, 7, 3
من اینطوری طراحی کردم چون احساس کردم از یه محصول ممکنه چند نمونه داشته باشین با توضیحات مختلف. مثلاً محصول: T-Shirt ولی توی فروشگاه تیشرت مردانه سفید و زنانه صورتی و بچگانه فانتزی و... ممکنه داشته باشین. پس توی جدول store باید برای هر قلم موجودی انبارتون بتونین توضیح جداگانه بنویسید. اگه این سناریو برای کار شما مناسب نیست، میتونید تغییرش بدین. من چیزی که به ذهن خودم رسیده رو گفتم. وحی مُنزَل نیست!
نقل قول:مثلاً محصول: T-Shirt ولی توی فروشگاه تیشرت مردانه سفید و زنانه صورتی و بچگانه فانتزی و... ممکنه داشته باشین

اتفاقا اینجا هم داریم اما باید بصورت جدا ثبت بشه. و در بخش های خودش بیاد.

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

بنظرتون اگر در جدول product  همونطور که در شکل می بینید یه فیلد (color) البته می دونم افزونگی داره ولی برای سرعت بخشیدن به عملیات جستجو و نزدن join  می تونیم تمام رنگ های تشکل دهنده الگو های رنگ را علاوه بر جدول theme_color در این فیلد نگه داریم؟

نظرتون رو راجع به این طراحی رو می خواستم

RELATIONS   TABLE NAME
                FIELD       SAMPLE VALUES
            =======================================
            categories
    ┌---┬-------id          1, 2, 3, 4
    |   |       name        pushak, man, woman, shirt, zivarAlat
    |   └-------parent_id   NULL, 1, 1, 2, NULL
    |       =======================================
    |       products
    |   ┌-------id          1
    └---┼-------category_id 3
        |       product_barnd_id
        |       product_materials_id
        |       product_country_id
        |       title       T-Shirt 2015
        |       sex            man
        |       short_desc  wtshirt
        |       long_desc   White T-Shirt
        |       price_new   1000
        |       price_old   1500 
        |       ...
        |   =======================================
        |   theme
    ┌---┼-------id          1, 2, 3
    |   └-------product_id  1, 1, 2
    |           title       snowwhite, bwstripe, snowwhite
    |           img
    |       =======================================
    |       productSize
    |           id          1, 2, 3
    └-----------theme_id
        ┌-------size_id
        |       weight      100g
        |       quantity    30, 7, 3
        |   =======================================
        |   sizes
        └-------id          1, 2, 3
                name        30, xlarge, medium
کسی نظری نداره؟
فکر میکنم از اینجا به بعدش رو باید خودتون مطابق سناریوی مدنظرتون تصمیم گیری کنید که آیا جوابگوی نیاز شما هست یا نه. هیچ کسی به اندازه شما به جزئیات و نیازهای سیستمتون آشنا نیست. من سعی کردم خیلی کلی راهنمایی کنم. دیگه اینکه چطور از Relationها توی کارتون استفاده کنید، بستگی به خلاقیت خودتون داره.
فرض کنید منو بندی سایت رو ایجاد کرده ام پوشاک با زیر دسته هاش و زیور آلات با دسته بندی هاش و البته دسته های دیگه.
حالا وقتی رو پوشاک می زنم می خوام تمام محصولاتی که جزو پوشاک هستند در خروجی بیاد و یا روی زیور آلات می زنم تمام زیور آلات نمایش داده بشه.
برای زیر دسته های مشکلی نیست چون cat_id اونها رو جستجو می زنیم اما برای ریشه ها چه کاری باید کرد
یا باید آی دی تمام زیر دسته ها رو بدست بیارم و در شرط با کمک or ، رکورد های مورد نظر رو پیدا کنم
یا اینکه یه فیلد جدید به جدول product اضافه کنم ؟
صفحات: 1 2