# پایگاه‌های داده > SQL Server > T-SQL >  منظور و نحوه ایجاد کلید خارجی فارن کی ؟

## saeed7474

دوستان
امکانش هست مفهوم کلید خارجی رو یک توضیح کلید بدین و اینکه در mysql چطور انرا ایجاد کنیم ؟

----------


## behnaz kimia

FOREIGN KEY یا کلید خارجی یک جدول در Sql به یک PRIMARY KEY یا کلید اصلی در جدولی دیگر اشاره می کند!
و از وارد کردن داده های نامعتبر در جدول جلوگیری میکند.

نیاز به ایجاد نداره کلید خارجی یک مفهومه
برای مثال شما دو جدول دانشجویان و انتخاب رشته دارید.
در جدول انتخاب رشته یک فیلد وجود دارد که این فیلد کلید اصلی جدول دانشجویان است.
به این فیلد در جدول دانشجویان کلید اصلی و در جدول انتخاب رشته کلید خارجی گفته می شود!

----------


## Rejnev

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



> نیاز به ایجاد نداره کلید خارجی یک مفهومه


درسته که ایجاد کلید خارجی ضروری نیست و سیستم بدون اون هم کار میکنه، اما ضمن این که اکثر سیستم های مدیریت دیتابیس مثل SqlServer و MySql و Oracle و...  به ما امکان ایجادش رو میدن، چرا ازش استفاده نکنیم؟! ضمن این که در طراحی اصولی، اکیدا توصیه میشه که باید ایجادش کرد تا از مختل شدن و بی معنی شدن بعضی داده ها جلوگیری کرد.
بدیهیست که سیستم مدیریت دیتابیس پس از تعریف کلید خارجی، وظیفه نگه داری از رکوردهای مرتبط شده به هم رو برای ما بعهده میگیره و از  حذف اونها جلوگیری میکنه.
کد نمونه ایجاد کلید خارجی در MS Sql Server:

Create Table Companies(ID int primary key, Name nvarchar(100));
Create Table CarModels(ID int primary key, Name nvarchar(100), CompanyID int foreign key references Companies(ID));

----------


## mehrdadz23

با سلام ، من برنامه ای درست کردم که نیاز به کلید خارجی دارد . جداول رو داخل sql server درست کردم و میخوام با دیاگرام به هم متصل بکنم از طریق کلید خارجی . در محیط #C چطور میتونم این کلید خارجی رو اعمال کنم . اطلا راهی هست برای این کار ؟ میشه در قسمت نوشتن کوئری در #C این کلید خارجی رو اعمال کنم ؟ لطفا توضیح بدید . ممنونم

----------

