View Full Version : سوال: کار کلید خارجی چیه و در تعریف کلید خارجی باید چه نکاتی رو مد نظر قرار داد؟
idocsidocs
یک شنبه 12 خرداد 1392, 19:54 عصر
کار کلید خارجی چیه و در تعریف کلید خارجی باید چه نکاتی رو مد نظر قرار داد؟
rasoul_par
یک شنبه 12 خرداد 1392, 20:30 عصر
کلید خارجی برای ارتباط یک جدول با جداول دیگست (البته برای ارتباط بین موجودیت ها در زمان طراحی)
نکات زیاد، مثل محدودیت های یکپارچه سازی (مثلا اگر پدر آپدیت یا دیلیت شد چه اتفاقی واسه فرزند بیوفته)، ایندکس بودن یا نبودنش، نال بودن یا نبودنش و ...
idocsidocs
یک شنبه 12 خرداد 1392, 22:36 عصر
پدر آپدیت یا دیلیت شد چه اتفاقی واسه فرزند بیوفته
بنظرم مهمترین مسئله همینه
فرض کنید اطلاعات جدول پدر اینسرت شد ولی قبل از اینسرت شدن اطلاعات جدول فرزند سرور از کار بیافته اینطوری دیگه فرزندی باقی نمی مونه. برای اینسرت کردن اطلاعات این دوجدول که رابطه پدر و فرزندی دارن باید دو کوئری مجزا بکار برد یا باید تراکنش کرد؟
مسئله دیگه اینکه برای جداولی که فرزند هستن، باید کلید اولیه هم تعریف کرد یا نه؟
rasoul_par
دوشنبه 13 خرداد 1392, 02:20 صبح
فرض کنید اطلاعات جدول پدر اینسرت شد ولی قبل از اینسرت شدن اطلاعات جدول فرزند سرور از کار بیافته اینطوری دیگه فرزندی باقی نمی مونه. برای اینسرت کردن اطلاعات این دوجدول که رابطه پدر و فرزندی دارن باید دو کوئری مجزا بکار برد یا باید تراکنش کرد؟
تیکه اول رو نفهمیدم منظورت چیه، ولی خب چند تا آپشن داریم توی دیتابیس:
ON DELETE (UPDATE) NO ACTION
ON DELETE (UPDATE) CASCADE
دو نمونه از اونهاست.
مسئله دیگه اینکه برای جداولی که فرزند هستن، باید کلید اولیه هم تعریف کرد یا نه؟
بستگی داره به نوع موجودیت. اگر موجودیت ضعیف باشه نه، اما اگر ضعیف نباشه قطعا اون موجودیت کلید اصلی خودش رو داره. فرض کن یک جدول داری واسه سفارش ها که توش آی دی محصولات رو آوردی، آی دی محصولات کلید خارجیه و هیچ ربطی به آی دی سفارش نداره.
این قضیه اولی هم که گفتم یه مثال بزنم، فکر کن توی همین فاکتور، میگی اگر محصول الف از جدول پاک شد، چه اتفاقی واسه آی دی که توی جدول سفارش هست بیوفته، پاک بشه، ندید بگیره، به NULL تبدیل بشه و ... .
idocsidocs
دوشنبه 13 خرداد 1392, 10:28 صبح
لطفا در مورد این کدها بیشتر توضیح بدید:
ON DELETE (UPDATE) NO ACTION
ON DELETE (UPDATE) CASCADE
اینجا منظور از ضعیف بودن چیه؟
اما اگر ضعیف نباشه قطعا اون موجودیت کلید اصلی خودش رو داره
rasoul_par
سه شنبه 14 خرداد 1392, 02:14 صبح
همون چیزی که بالا گفتمه، فیلد a که یک کلید خارجیه حتما به یه جدول دیگه مربوطه مثل جدول x، حالا اگر یک فیلد خاص توی جدول X آپدیت/دیلیت بشه، واسه فیلد a که توی یک جدول دیگست چه اتفاقی بیوفته، هیج اتفاقی نیوفته، کسکید بشه یعنی بعد از تغییر توی جدول x فیلد a هم تغییر کنه، به نال تبدیل بشه و ...
موجودیت ضعیف توی طراحی دیتابیست مشخص میشه، مثلا فکر کن پرسنل میتونن فرزنداشون رو بیمه کنن و اطلاعات فرزند مثل سن و ... لازمه، در این صورت موجودیت فرزند یک موجودیت ضعیفه چون به یک موجودیت دیگه یعنی پرسنل وابسته است. برای اطلاعات بیشتر بهتره به کتابای طراحی پایگاه داده مراجعه کنی که کامل توضیح دادن
idocsidocs
سه شنبه 14 خرداد 1392, 08:41 صبح
برای اطلاعات بیشتر بهتره به کتابای طراحی پایگاه داده مراجعه کنی که کامل توضیح دادن
لطفا یه کتاب معرفی کنید.
rasoul_par
سه شنبه 14 خرداد 1392, 10:43 صبح
فارسی کتاب های مختلفی هست مثل کتاب ناصر آیت و دکتر رانکوهی که ایبوک هر دوتاش هست.
انگلیسی هم من کتاب Database Management Systems (2nd Ed.) نوشته Raghu Ramakrishnan و یه نفر دیگه رو پیشنهاد میکنم.
idocsidocs
سه شنبه 14 خرداد 1392, 18:00 عصر
فارسی کتاب های مختلفی هست مثل کتاب ناصر آیت و دکتر رانکوهی که ایبوک هر دوتاش هست.
این کتابها مخصوص mysql هستن یا کلی توضیح دادن؟
rasoul_par
سه شنبه 14 خرداد 1392, 18:27 عصر
موجودیت ضعیف ربطی به DBMS نداره، مثل اینکه تو بخوای یک برنامه ماشین حساب بنویسی، اول باید مشخص کنی توابع مختلف چطور کار میکنن، بعد میتونی با هر برنامه ای بنویسیش، C#، جاوا، پی اچ پی و ...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.