# پایگاه‌های داده > SQL Server > T-SQL > تحلیل و طراحی بانک اطلاعات >  تحلیل دیتابیس یرای فروشگاه اینترتی

## sadegh.te

سلام دوستان من میخوام که دیتابیس یک فروشگاه اینترنتی رو که ویژگیهای زیر رو داشته باشه طراحی کنم ممنون میشم کمکم کنید؟ فروشگاه من سناریو کلیش مثل سایت دیجی کالا هستش و کالا های دیجتال رو برای فروش میزارم.
1-فروش انواع کالای دیجیتال مثل موبایل و تبلت و لپ تاپ و کامپیوتر و دوربین عکاسی و لوازم خانگی
2-امکان ثبت نظر برای هر کالا 
3-دادن امتیاز یا همان LIKE به هر کالا
4-دادن پروفایل به کاربران که شامل موقعیت کالای سفارش داه شده ی آنها می باشد یعنی کالا در چه مرحله ای است و ...
5-انبار برای محصولات
6-فاکتور خرید
7-فاکتور فروش
8-نوع پست
9-جدول ویژگی کالاها چون ویژگی هر کالا با کالای دیگه متفاوت است.
اگه باز چیز دیگه ای هست که باید اضافه بشه بگید ممنون . من تو طراحی دیتابیس مشکل دارم خواهشا کمک کنید که دیتابیس خوبی طراحی کنم با تشکر.

----------


## aminmousavi

سلام دوست عزیز . خوب شما کل er و اطلاعتی که پیاده سازی کردی ( یا اونجاهایی که شک داری) رو قرار بده . تا بشه روش بحث کرد و نظر داد . همچین سناریویی رو به n روش میشه پیاده سازی کرد .

----------


## sadegh.te

من تو قسمت محصولات و ویژگیها مشکل دارم نویدونم چطور پیاده سازیش کنم؟

----------


## Borland.C

> من تو قسمت محصولات و ویژگیها مشکل دارم نویدونم چطور پیاده سازیش کنم؟


همون طور که آقای *aminmousavi* گفتند n راه هست بستگی به خودتون داره.
اگه ویژگی های کالاها ثابت هستن یک جدول با ستون های مشخصات ایجاد کن بعد برای کالاها کلید خارجی تعیین کن,ولی در حالت کلی فکر می کنم بهتری کار (با نگاه به آینده) این باشه که از مشخصات هر کالا یک آرایه بسازی و در یک فیلد مشخصات به صورت متن json ذخیره کنی این جوری دستتون خیلی باز میشه
ولی درکل بستگی به سیاست های خوتون داره سوالتتون خیلی کلی هست
بهتره سناریو ها تک تک پیشنهاد کنید تا رو آنها بحث بشه

----------


## sadegh.te

خوب معلومه که همه ویژگیها باهم فرق دارن فرضا گوشی سامسونگ نوت 3 ویزگیهاش بایه گوشی ساده فرق داره و یا به صورت کلی تر بگم که ویژگی های یخچال با موبایل یا لپ تاپ فرق داره من تو این قسمتش دچار مشکل شدم؟

----------


## aminmousavi

میتونی از این روش استفاده کنی (سادست و با پیچیدگی کم که برای فروشگاه های کوچیک مناسبه ) :
فرض میگیریم یک جدول داری به اسم product که کلیه محصولات توش ذخیره میشه .
یک جدول دیگه داری به اسم Attribute که خاصیت ها توش ذخیره میشه . مثلا : باتری 6 سل ، ال سی دی 17 ، رم 4 ، و ...
یک جدول داری به اسم AttributeAssignment که خاصیت ها رو به product ها وصل میکنی ، فیلد هاش میشه : 
id
idprodct
idAttribute
 موقع نمایش محصول selct میزنی توی AttributeAssignment  میبنی چه خاصیت هایی داره .

----------


## sadegh.te

> میتونی از این روش استفاده کنی (سادست و با پیچیدگی کم که برای فروشگاه های کوچیک مناسبه ) :
> فرض میگیریم یک جدول داری به اسم product که کلیه محصولات توش ذخیره میشه .
> یک جدول دیگه داری به اسم Attribute که خاصیت ها توش ذخیره میشه . مثلا : باتری 6 سل ، ال سی دی 17 ، رم 4 ، و ...
> یک جدول داری به اسم AttributeAssignment که خاصیت ها رو به product ها وصل میکنی ، فیلد هاش میشه : 
> id
> idprodct
> idAttribute
>  موقع نمایش محصول selct میزنی توی AttributeAssignment  میبنی چه خاصیت هایی داره .


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

----------


## aminmousavi

فیلد خالی زیاد !!!!!!!! اصلا فیلد خالی نداره این روش .
جدول product  که چیزاهای اساسی مثل : قیمت و اسم و ...
جدول Attribute : نام و مقدار
جدول AttributeAssigment : ای دی کالا ، ای دی attribute

به روش هایی که مطرح میشه بیشتر توجه کن دوست عزیز .

----------


## sadegh.te

یعنی شما میگید که جدول Attribute فقط سه فیلد داشته باشه؟
مثل:
attribute          id_attribute          id_product
1________                       1________                         RAM
1________                       2________                         CPU
 1________                       3 _______                        Display
1________                       4________                         Memory
2________                       5________                         HDD 
2________                       6 ________                        RAM
2________                       7 ________                        Graohic
و....
میشه یکم مسئله رو باز کنی؟ ممنون

----------


## sadegh.te

> فیلد خالی زیاد !!!!!!!! اصلا فیلد خالی نداره این روش .
> جدول product  که چیزاهای اساسی مثل : قیمت و اسم و ...
> جدول Attribute : نام و مقدار
> جدول AttributeAssigment : ای دی کالا ، ای دی attribute
> 
> به روش هایی که مطرح میشه بیشتر توجه کن دوست عزیز .


آیا منظور شما روش زیر هستش؟

      کالا   ( شماره کالا ، نام نوع )
مشخصات ( شماره مشخصه ، ...)
ویژگی ها  ( شماره کالا ، شماره مشخصه، مقدار )

مثال :
       کالا ( 1001، موبایل )
           ( 1002،ماشین لباس شویی)
             ..........

مشخصات ( 11001، رنگ )
             ( 11002، صفحه نمایش )
          ..........

ویژگی ها ( 1001، 11001،  سبز)
             ( 1001، 11002، 5 اینچ )
            .............

----------


## aminmousavi

نه دوست عزیز .
فرض کن کن :
produt {id , name , price}
10 ، گوش سامسونگ مدل 11 ، 100000

Attribute {id , name , value}

id=1
name=cpu
value=DualCore

id=2
name=cpu
value=CoreI2

id=3
name=Blutooth
value=RB1023932

id=4
name=Inch
value=14

id=5
name=Inch
value=15


بعدش این مقدار ها رو به محصولات انتساب میدی :
id=1
idproduct=10
idAttribute=5

id=1
idproduct=10
idAttribute=2

----------


## aminmousavi

البته باید توجه کنی که بهتر از این هم میشه نوشت ، این جزو ساده ترین روش هاست که مقدار های زیادی برای هر محصول داری . که مسلما ایده آل نیست .

----------


## sadegh.te

ممنون ولی با این روش شما باید انواع اینچ و انواع CPU و .... باید تو جدول Attribute تعریف کنیم .

چطور میتونم با یه روش بهینه تر درستش کنم؟ ممنون میشم کمکم کنی.

----------


## جواد نوری

سلام خدمت دوستان
با اجازه ی اساتید به نظر من، بهرته یه جدول به نام محصولات داشته باشی با فیلدهای لازمه مثلا (ID,name)
و جدولی به نام مشخصات با این فیلدها(ID,productID,name,value)
مثلا در جدول محصولات
1   dell vostro 1520
2   dell vostro 1540
...
جدول خصوصیات
1   1    i3  2.6Hz  CPU
1   1    4GB RAM
1   1    15.2inch monitor
2   2    ....
.
.
.
اینطوری هم برای خصوصیات دستت بازتره و هم یک جدول کمتر استفاده میشه

----------


## ashkandehnavi

> میتونی از این روش استفاده کنی (سادست و با پیچیدگی کم که برای فروشگاه های کوچیک مناسبه ) :
> فرض میگیریم یک جدول داری به اسم product که کلیه محصولات توش ذخیره میشه .
> یک جدول دیگه داری به اسم Attribute که خاصیت ها توش ذخیره میشه . مثلا : باتری 6 سل ، ال سی دی 17 ، رم 4 ، و ...
> یک جدول داری به اسم AttributeAssignment که خاصیت ها رو به product ها وصل میکنی ، فیلد هاش میشه : 
> id
> idprodct
> idAttribute
>  موقع نمایش محصول selct میزنی توی AttributeAssignment  میبنی چه خاصیت هایی داره .


سلام
ببخشید میشه یه روش مناسب تر برای داده های بیشتر بدید
ممنون میشم

----------

