# پایگاه‌های داده > سایر پایگاه‌های داده > MySQL > سوال: Relation چیست؟

## amin7x

سلام دوستان
من میخواستم بدونم که Relation در دیتابیس به چه دردی میخوره؟

ممنون میشم یک توضیح خوب به من بدهید.

----------


## amin7x

up post...

----------


## Beginner Programmer

سلام و درود
خیلی چیزها تو دنیای کامپیوتر هستند که تا باهاشون کار نکنی نمیفهمی دقیقا چی هستند و به چه دردی میخورند.
من هم یه زمانی هرچی تو اینترنت و کتابها میخوندم نمیفهمیدم relation یعنی چی.
به طور خیلی کلی بخوام بگم relation از ایجاد خطا جلوگیری میکنه.

----------


## amin7x

> سلام و درود
> خیلی چیزها تو دنیای کامپیوتر هستند که تا باهاشون کار نکنی نمیفهمی دقیقا چی هستند و به چه دردی میخورند.
> من هم یه زمانی هرچی تو اینترنت و کتابها میخوندم نمیفهمیدم relation یعنی چی.
> به طور خیلی کلی بخوام بگم relation از ایجاد خطا جلوگیری میکنه.


یعنی چی که از خطا جلوگیری میکنه؟
من یک توضیح کامل میخوام.

----------


## amin7x

up post...

----------


## amin7x

up post...

----------


## MMSHFE

Spam نفرستین!

----------


## MMSHFE

Relation بطور کلی یک قابلیت خیلی خوب در بانکهای اطلاعاتی محسوب میشه. برای اینکه راحت متوجه بشین، با مثال توضیح میدم. فرض کنید توی جدول students فیلدهای id و name و توی جدول grades فیلدهای sid و grade رو داریم که sid یک کلید خارجی هست که به فیلد id از جدول students وصله و چنین قیدی روش داریم:

ALTER TABLE `grades`
  ADD CONSTRAINT `fk_grade_student` FOREIGN KEY (`sid`) REFERENCES `students` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

الآن این قید باعث میشه اگه بخوایم یک دانشجو رو حذف کنیم درحالی که توی جدول grades نمره داره، اجازه حذف نده. ازطرفی وجود relation باعث میشه نتونیم رکوردی رو توی جدول grades ثبت کنیم که sid اون برابر با 5 هست، درحالی که دانشجویی با id شماره 5 نداریم!
ازطرفی دوباره قیدی که گذاشتیم باعث میشه اگه بیایم id دانشجوی شماره 5 رو به 7 تغییر بدیم، تمام رکوردهای منتاظرش توی جدول grades هم sid اونها به 7 تغییر کنه (بدون کدنویسی و بطور خودکار توسط MySQL)
حالا اگه قید رو اینطوری تعریف میکردیم:

ALTER TABLE `grades`
  ADD CONSTRAINT `fk_grade_student` FOREIGN KEY (`sid`) REFERENCES `students` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

باعث میشد با حذف یک دانشجو، تمام نمراتش هم حذف بشن (باز هم بطور خودکار و بدون کدنویسی اضافه)
در کل بهتره درمورد Differences of DBMS and RDBMS و انواع مختلف قید (Constraint) در MySQL و تفاوتهای اونها جستجوی بیشتری داشته باشین. البته تمام این موارد روی موتور InnoDB کار میکنه و MyISAM از این قابلیتها بهره مند نیست.

----------


## bikran

با سلام استاد
ميشه در مورد اين مبحث در پكيج آموزشيتون هم قسمتي رو تدارك ببينيد؟
آخه در مورد Relation مطالب فارسي خوبي پيدا نميشه.
با تشكر

----------


## MMSHFE

پکیج آموزشی PHP روی این موضوعات تمرکز نداره چون این مباحث مربوط به تجزیه و تحلیل دیتابیس و ویژه DBMS موردنظره. برای مثال ممکنه یکنفر بخواد توی پروژه از Access استفاده کنه و دلیلی نداره ساختار Relationهای Access رو هم توی پکیج PHP توضیح بدیم. البته از این موارد توی دو پروژه نمونه ای که توی پکیج PHP انجام میشه، استفاده شده و توضیحات مناسب رو هم درموردشون ارائه کردم ولی همونطور که گفتم، تمرکز این پکیج روی MySQL نیست و تولید آموزشهایی درمورد MySQL و مباحث طراحی دیتابیس و حتی مباحث کلی مثل معماری سه لایه (با MVC اشتباه نگیرین) و اصول مهندسی نرم افزار و طراحی ساختار دیتابیس و ارتباطها و نرمالسازی و... هم توی دستور کاری دپارتمان آموزش ایران نهاد هست (اگه عمری باقی باشه).



> آخه در مورد Relation مطالب فارسي خوبي پيدا نميشه.


بجز پکیجهای ایران نهاد! درمورد چی طلب فارسی خوب پیدا میشه که این دومیش باشه  :چشمک:

----------

