PDA

View Full Version : طراحی تیبل محصولات و ویژگی های داینامیک ؟؟



HamidiFar
دوشنبه 24 بهمن 1390, 15:17 عصر
سلام

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

به عنوان مثال :
82600

یعنی ویژگی کاملا داینامیک باشد

حالا من تیبل های مرتبط رو چه طور طراحی کنم که کاربر بتونه محصولات رو با ویژگی خاص پیدا کنه

یعنی بتونه بگه محصولی رو میخوام که ویژگی P1 برابر V1و P2 برابر V2 و P3 برابر V5 باشه

چیزی که من درست کردم در ابتدا به اینصورته :
82602

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

in_chand_nafar
دوشنبه 24 بهمن 1390, 15:39 عصر
تمامی این مواردیکه می گم باید روش بحث و بررسی بشه
جدول انواع ویژگی : کد ویژگی int- نام ویژگی Nvarchar(100) : اگر خواستی نوع ویژگی را اضافه کن و موقع ایجاد UI فیلد دیتا اینتری را بر اساس آن در نظر بگیر
جدول انواع محصول : کد محصول int - نام محصول Nvarchar(100)
جدول ویژگی هر محصول : ID - کد محصول int- کد ویژگی int ، مقدار ویژگی (Nvarchar(100))
فعلا با این شروع کن اگر خواستی به راحتی می توانی Select های مورد نظر خودت رو ایجاد کنید
یه راخهش این است که بری سراغ XML و XQUery که کمی سخت و... است اما در کل یه راه خوب است

HamidiFar
دوشنبه 24 بهمن 1390, 15:58 عصر
ممنون از جواب شما

لطف کنید در مورد select توضیح بدید من قبلا موارد مورد اشاره شما رو تست کردم مسئله اینه که چون تعداد ویژگی ها ی فیلتر شده رو نمی دونیم نمی دونم چه جوری از subquery و select های تو در تو استفاده کنم

in_chand_nafar
دوشنبه 24 بهمن 1390, 18:00 عصر
دوست عزیز یه سر به اینجا بزنید
http://barnamenevis.org/showthread.php?212956-%D9%86%D8%AD%D9%88%D9%87-%D8%AF%D8%B3%D8%AA%D9%87-%D8%A8%D9%86%D8%AF%D9%8A-%D9%85%D8%AD%D8%B5%D9%88%D9%84%D8%A7%D8%AA-%D8%AF%D8%B1-%D9%8A%D9%83-Eshop-%D8%A8%D8%B2%D8%B1%DA%AF&highlight=EAV
-----
دوست عزیز توی این مقاله روش های مختلف رو بررسی کرده و ایراد و خوبی اونها را گفته روش جالبش اینه
Class Table Inheritance (http://martinfowler.com/eaaCatalog/classTableInheritance.html): one table for Products, storing attributes common to all product types. Then one table per product type, storing attributes specific to that product type. (http://martinfowler.com/eaaCatalog/singleTableInheritance.html)
(http://martinfowler.com/eaaCatalog/singleTableInheritance.html)یه نگاهی بیانداز خیلی ساده و کم هزینه است در جدول کالا یک فیلد با نام Attribute داشته باش که از نوع Varchar(max) است
و ویژگی ها با کاما از هم جدا شده اند .... مثال
------------ Rec1
نام کالا : موز
ویژگی ها : نوع:میوه*رنگ:زرد*شرکت تولید کننده:سومالی
------------ Rec2
نام کالا : سیب
ویژگی ها : نوع:میوه*رنگ:زرد*شرکت تولید کننده:مراغه
------------ Rec3
نام کالا : سیب
ویژگی ها : نوع:میوه*رنگ:قرمز*شرکت تولید کننده:دماوند
------------ Rec4
نام کالا : مداد
ویژگی ها : نوع:لوازم التحریر*رنگ:قرمز*شرکت تولید کننده:استدلر
------------ Rec5
نام کالا : خودکار
ویژگی ها : نوع:لوازم التحریر*رنگ:سبز*شرکت تولید کننده:استدلر
------------ Rec5
نام کالا : مداد شمعی
ویژگی ها : نوع:لوازم التحریر*رنگ:سبز*شرکت تولید کننده:بیک

لیست کالاهایی که رنگشان قرمز و شرکت تولید کننده اشان استدلر باشد
اگر از این ساختار خوشت نیاومد می توانی از XML استفاده کنی


[/URL]-----


یادم میاد توی یکی از کتاب های itzik ben gan (نویسنده یهودی کتاب های MSPress)
به این مسئاله اشاره شده بود و روش های مختلف را از نظر Performance مقایسه می کرد
[URL]http://www.amazon.com/Inside-Microsoft%C2%AE-SQL-Server%C2%AE-2008/dp/0735626030 (http://martinfowler.com/eaaCatalog/singleTableInheritance.html)