سلام
من دو سه ساعت نیودم، چقدر پست رد و بدل شد
نوشتههای دوستمون Davidd کاملاً درسته. من یه کم قضیه رو باز میکنم هر چند که این روش به درد صورت مسالهی شما نمیخوره.
میخوایم یه موبایل رو ذخیره کنیم.
1. یه سطر به جدول کالاها اضافه میکنم که فقط شامل نوع کالا ( موبایل ) نام کالا ( ایفون 6 ) و مثلاً کد کالا هست ( مثلاً بارکد کالا )
اضافه کردن یک سطر به این جدول یه Id برای من تولید میکنه که مثلاً 315 هست. ( چون Id از نوع Identity هست )
2. حالا به جدول اطلاعات موبایل یه رکورد اضافه میکنم شامل Id ( با مقدار 315 )، میزان حافظه ( 64 ) تعداد سیمکارت ( 1 ) و غیره
و حتماً باید هر دو اضافهکردن داخل یک Transaction انجام بشه.
حالا میخوایم یه مانیتور رو اضافه کنیم.
1. یک سطر به جدول کالاها اضافه میکنیم که شامل اطلاعات نوع کالا ( مانیتور ) نام کالا ( Asus ) و بارکد کالا هست.
اضافه کردن این سطر هم یه Id ایجاد میکنه ( مثلاً 317 )
2. یک سطر به جدول مانیتورها اضافه میکنیم که شامل Id (با مقدار 317 ) و قطر ( "19 ) و قدرت تفکیک و کنتراست و مثلاً داشتن یا نداشتن Speaker هست.
توجه کن که تو جدول کالاها هم مانیتور اومده و هم موبایل ( Id های 315 و 317 رو داریم )
اما تو جدول موبایلها فقط 315 رو داریم و تو جدول مانیتورها هم فقط 317 رو.
از نظر Relation ها:
1. چون Idها تو جدولهای مانیتور و موبایل از نوع Identity نیستن، پس میتونیم ( و باید ) بهشون مقدار بدیم
2. چون Idها Primary Key هستن، پس یکتا هم هستن، پس رابطه با جدول اصلی ( کالاها ) به صورت یک به یک نمایش داده میشه.
اما با توجه به این که فقط برای برخی از سطرهای جدول اصلی تو این جدول سطر متناظر وجود داره، بنابراین نرمالسازی رو نقض نمیکنه.
3. چون Idها کلید خارجی برای جدول اصلی هستن، امکان حذف از جدول اصلی بدون حذف شدن سطر متناظر وجود نداره.
نکته:
تو دریافت اطلاعات مثلاً موبایلها نیازی نداری که شرط بگذاری که نوع کالا حتماً موبایل باشه. کافیه جدول کالاها رو با جدول موبایلها
join کنی، فقط فهرست موبایلها رو دریافت میکنی.
راستش دیگه بیشتر نمیتونم توضیح بدم. امیدوارم که کاملاً روشن بوده باشه.
و باز هم متذکر میشم که این راه حل همونطور که دوستمون Davidd نوشته بود، فقط وقتی به درد میخوره که تنوع محصولات کم و ثابت باشه.
اگه قراره هر روز محصول جدیدی اضافه بشه و خصیصههای جدیدی هم داشته باشه، راه حل همونی هست که قبلاً گفتم. یعنی استفاده از
MetaData یا نگهداری اطلاعات به صورت Xml یا Json توی یک ستون از جنس ( NVARCHAR( MAX که فقط مشکلش اینه که اطلاعات باید سطر
به سطر تحلیل بشه. من روش MetaData رو ترجیح میدم.
صبا صبوحی