سلام

امروز یک نکته خیلی مهم درباره ایجاد رابطه یک به یک در SQL که شاید تا به حال هیچکس بهش توجه نکرده باشه رو می خوام بگم ....

در هر ارتباطی ما دو نوع موجودیت (جدول) داریم ،

1- وابسته
2- مستقل

توی جدول مستقل می تونین هر چی دوست دارین قرار بدین

ولی توی جدول وابسته فقط می تونین بر اساس مقادیری که توی جدول مستقل هست ، دیتا وارد کنین ...


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


در نتیجه هیچ فرقی نمی کنه که شما کدوم جدول رو به کدوم جدول وصل کنین ..

یعنی مثلا اگر ما یک جدول Goods و یک جدول type بصورت زیر داشته باشیم ...

Goods :

Id Title Type_Id


Type :
Id Title


در این صورت برای ایجاد ارتباط یک به چند فرقی نمی کنه که شما در محیط دیاگرام ، ستون Type.Id رو به ستون Goods.Type_Id وصل کنین و یا بالعکس ....

چون Type.Id یونیک است ولی Goods.Type_Id یونیک نیست ؛ در نتیجه خود SQL جدول Type رو بعنوان موجودیت مستقل و Goods رو بعنوان موجودیت وابسته در نظر می گیره

--- - -- -- - -- -- - -- - -- -- -

خطر !

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

در این حالت SQL چکار می کنه ؟

در این زمان SQL جدولی که اول انتخاب کردین و بعد درگ کردین و به جدول دوم وصل کردین رو مستقل و جدول دوم رو وابسته در نظر می گیره ...

پس در این حالت خیلی فرق می کنه که شما Goods.Type_Id رو به Type.Id وصل کنین یا بالعکس ...


پس حتما در ارتباط یک به یک حواستون باشه که کدوم جدول رو دارین به کدوم جدول وصل می کنین ....

و این بود حاصل تجربه بنده ....


من فکر می کردم که SQL از روی Primery Key جدول مستقل رو تشخیص میده که در اینصورت در حالت یک به یک از روی Primary key راحت SQL می تونست جدول مستقل رو به درستی تشخیص بده .

بناربراین من همینطوری یه جدول رو به جدول دیگه وثل می کردم ..

ولی سر یه پروژه به مشکل خوردم که باکمک استاد فهمیدم که یه جای کارم می لنگه که با عث شد بیشتر روی ارتباطام دقت کنم و متوجه بشک مه SQL از روی ستون یونیک جدول وابسته و مستقل رو تشخصیص مبده نه از روی کلید اصلی (Primatry Key)

و همین باعث میشه که توی ارتباط یک به یک خیلی فرق کنه که شما جدول A رو به جدول B وصل می کنین یا جدول B رو به جدول A وصل می کنین.

امیدوارم تجربم به درد دوستان هم بخوره ....

یا حق

نوشته شده در تاریخ یکشنبه 23 مهر 1391    | توسط: ح.م    | طبقه بندی: آموزش پایگاه داده MYSQL,SQL,LINQ،     | نظرات()