• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کارکرد کلید خارجی
#1
دوستان من تا حالا نیاز پیدا نکرده بودم با کلید خارجی کار کنم . حالا طبق مثال زیر چند تا سوال دارم :
کلید خارجی
اولین سوال اینه که وقتی با کلید خارجی دو جدول رو به هم مربوط یا وصل کردیم . در اون جدول دومیه که کلید خارجی وجود داره ( یعنی جدولborrowed) وقتی میخوایم ردیف درج کنیم باید employeeid رو دستی وارد کنیم دیگه نه؟

دوم اینکه این مقدار employeeid که ذخیره می شه آیا فضایی رو اشغال می کنه

سوم آیا نمی شه بدون کلید خارجی از join استفاده کرد .
  پاسخ
تشکر شده توسط :
#2
کلید خارجی صحت اطلاعات رو بررسی می کنه. شما می تونید بدون کلید خارجی هم join کنید. یکی دیگه از کارهایی که می کنه اینه که این ارتباط همیشه بین رکورد وجود داره. مثلا وقتی که کلید اولی عوض میشه فیلد کلید ارتباط دهنده در جدول دوم هم عوض میشه. یا مثلا می تونین تعریف کنین که اگر رکورد از جدول اول حذف شد در داخل جدول دوم چه اتفاقی بیفته.
  پاسخ
تشکر شده توسط : jpeka7 shgninc it_nazanin
#3
اینجا یه سوال دیگه پیش میاد .
من قبلا خونده بودم که استفاده از کلید خارجی افزونگی رو کاهش می ده ولی در عمل انگار این طور نیست . مثلا :
فرض کنید که یک جدول بخش و یک جدول زیر بخش داریم . هر بخش میتونه چندین زیر بخش داشته باشه .
قبلا وقتی که بخش رو ایجاد می کردم در هنگام ایجاد زیر بخش میو مدم دوباره یه فیلد به اسم بخش می گذاشتم و بخش رو هم می نوشتم که خوب این افزونگی الان . خوب اون وقت الان میام کد بخش رو باز دستی می نویسم . یعنی باز هم از فضا داره استفاده می شه . چطوری می شه که اون حالت اول افزونگیه ولی این دومی نیست ؟
می شه یه توضیح بدید .Huh
  پاسخ
تشکر شده توسط :
#4
من اطلاع دقیقی از صحبتی که داری ندارم. ولی به نظرم نباید تاثیری روی افزونگی داشته باشه
  پاسخ
تشکر شده توسط :
#5
خب بالاخره فضا میگیره ولی تصور کنید حالتی که دو تا جدول با تعداد ستون های زیاد داریم که به هم مرتبط هستند. مثلا جدول دانشجو که شامل مشخصات دانشجو هست و جدول استاد که شامل مشخصات استاده
اگه بخوایم مثلا اطلاعات استاد راهنمای هر دانشجو رو برای دانشجو بنویسیم، مجبوریم تمام فیلد های مورد نیاز رو به جدول دانشجو اضافه کنیم و این یعنی افزونگی داده. چون مجبوریم تمام اطلاعات اون فیلد ها رو دوباره بنویسیم یه جای دیگه. در حالی که یه فیلد کلید خارجی، جای خیلی کمتری میگیره
  پاسخ
تشکر شده توسط :
#6
توی مباحث نرمال سازی جلوگیری از افزونگی رو داریم. در حالی که وجود کلید خارجی با این موضوع در تضاد هست. در واقع این داده تکراری به منظور یکپارچگی دیتابیس در نظر گرفته نمیشه.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#7
سلام به همه
سوال من در مورد CASCADE هست تا جای سرچ کردم همش Update , delete
بود جای حرف از insert خودکار درون کلید خارجی نزده بود؟
راهی داره؟
یا باید زمانی داریم اینزرت میکنیم توی کلید اصلی توی کلید های خارجی هم اینزرت کنیم؟
ممنون
  پاسخ
تشکر شده توسط :
#8
(۱۳۹۳ تير ۱۴, ۰۳:۰۶ ب.ظ)A.ardalan far نوشته: سلام به همه
سوال من در مورد CASCADE هست تا جای سرچ کردم همش Update , delete
بود جای حرف از insert خودکار درون کلید خارجی نزده بود؟
راهی داره؟
یا باید زمانی داریم اینزرت میکنیم توی کلید اصلی توی کلید های خارجی هم اینزرت کنیم؟
ممنون
آبشاری به این خاطره وقتی کلید اصلی اتفاقی براش افتاد تکلیف کلید خارجی مشخص بشه
یعنی اگه کید اصلی حذف شد کلید خارجی هم حذف شه یا نه
ولی insert ربطی به این نداره
چون ممکنه کلید اصلی موجود باشه ولی کلید خارجی متناظر موجود نباشه و نیازی هم به اش نباشه
شما برای این کار میتونید از trigger استفاده کنید
  پاسخ
تشکر شده توسط : A.ardalan far


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان