با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره آموزش کامل SQL را دنبال می کنند. همانطور که قبلا نیز اشاره شد، شما می توانید با تعریف ویژگی PRIMARY KEY در جداول یک پایگاه داده ی SQL، بین جداول ارتباط برقرار کنید. اما فقط تعریف این ویژگی کافی نیست، شما باید فیلد یا فیلدهایی که به عنوان PRIMARY KEY در یک جدول تعریف کرده اید را در جدول مقابل نیز، داشته باشید. اما در آن جدول باید از یک ویژگی دیگر استفاده کنید که ما در ادامه ی مبحث آشنایی با ویژگی FOREIGN KEY در SQL یا کلید خارجی در SQL ، شما را با آن آشنا خواهیم کرد.
ویژگی FOREIGN KEY در واقع کلیدی برای ارتباط و لینک شدن دو جدول است.
FOREIGN KEY در واقع فیلد یا مجموعه ای از فیلدهاست، که به PRIMARY KEY سایر جداول پایگاه داده، اشاره می کند.
جدولی را که دارای کلید خارجی یا FOREIGN KEY باشد را جدول فرزند می نامند.
و جدولی را که کلید ارتباط با جدول قبلی را داشته باشد. جدول مرجع یا والد می نامند.
ما از دو جدول زیر، برای مثالهای ارائه شده در این آموزش استفاده می کنیم:
جدول “Persons”:
PersonID | LastName | FirstName | Age |
---|---|---|---|
۱ | Hansen | Ola | ۳۰ |
۲ | Svendson | Tove | ۲۳ |
۳ | Pettersen | Kari | ۲۰ |
جدول “Orders”:
OrderID | OrderNumber | PersonID |
---|---|---|
۱ | ۷۷۸۹۵ | ۳ |
۲ | ۴۴۶۷۸ | ۳ |
۳ | ۲۲۴۵۶ | ۲ |
۴ | ۲۴۵۶۲ | ۱ |
دو جدول فوق، از طریق فیلد “PersonID” که در هر دو جدول وجود دارد، با هم ارتباط دارند.
فیلد “PersonID” در جدول “Persons” به عنوان PRIMARY KEY( کلید اصلی) این جدول تعریف شده است.
فیلد “PersonID” در جدول “Orders” به عنوان FOREIGN KEY(کلید خارجی) این جدول تعریف شده است.
FOREIGN KEY در واقع ارتباط بین دو جدول را حفظ می کند. و از اقداماتی که ارتباط بین جداول را از بین می برد جلوگیری می کند.
داده هایی که در فیلدFOREIGN KEY وارد می شود. ابتداباید در فیلد کلید جدول والد وجود داشته باشد.
مثال زیر یک جدول با نام Orders ایجاد می کند که یکی از فیلدهای آن به نام PersonID به عنوان FOREIGN KEY تعریف شده است:
1 2 3 4 5 6 7 | CREATE TABLE Orders ( OrderID int NOT NULL, OrderNumber int NOT NULL, PersonID int, PRIMARY KEY (OrderID), FOREIGN KEY (PersonID) REFERENCES Persons(PersonID) ); |
در بانک های اطلاعاتی SQL Server / Oracle / MS Access:
1 2 3 4 5 | CREATE TABLE Orders ( OrderID int NOT NULL PRIMARY KEY, OrderNumber int NOT NULL, PersonID int FOREIGN KEY REFERENCES Persons(PersonID) ); |
برای تعریف کلید خارجی که شامل چند فلید می شود از ساختار زیر استفاده کنید:
در بانک های اطلاعاتی MySQL / SQL Server / Oracle / MS Access:
1 2 3 4 5 6 7 8 | CREATE TABLE Orders ( OrderID int NOT NULL, OrderNumber int NOT NULL, PersonID int, PRIMARY KEY (OrderID), CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID) REFERENCES Persons(PersonID) ); |
مثال زیر فیلد “PersonID” از جدول “Orders” را که قبلا ایجاد شده است را به عنوان کلید خارجی تعریف می کند:
در بانک های اطلاعاتی MySQL / SQL Server / Oracle / MS Access:
1 2 | ALTER TABLE Orders ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID); |
مثال زیر با ایجاد FK_PersonOrder امکان استفاده از چند فیلد را به عنوان کلید خارجی می دهد:
در بانک های اطلاعاتی MySQL / SQL Server / Oracle / MS Access:
1 2 3 | ALTER TABLE Orders ADD CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID) REFERENCES Persons(PersonID); |
برای حذف یک ویژگی FOREIGN KEY از جداول SQL از ساختارهای زیر استفاده کنید:
در بانک اطلاعاتی MySQL:
1 2 | ALTER TABLE Orders DROP FOREIGN KEY FK_PersonOrder; |
دربانک های اطلاعاتی SQL Server / Oracle / MS Access:
1 2 | ALTER TABLE Orders DROP CONSTRAINT FK_PersonOrder; |
کاربرد اصلی یک کلید خارجی در جداول SQL ، حفظ ارتباط با جدول والد بوده و از اقداماتی که باعث قطع رابطه ی بین جداول می شود نیز، جلوگیری می کند. امیدواریم که مباحث آشنایی با ویژگی کلید خارجی در SQL مورد توجه شما قرار گرفته باشد.
zohre
ممنون پاسخ سوالم رو به طور کامل گرفتم
Sh
سلام وقت بخیر من با دستور alterدقیقا همین کد وارد میکنم خطایsyntaxبهم نمیده جدولیم که باید براش کلید خارجی بزارم موجوده اما بهم ارور نامعتبر بودن بودن میده میشه بگید مشکلش کجاس
پی وی لرن
با سلام
بایستی بررسی کنید تک تک موارد را معمولا در این موارد نام جدول یا کلید خارجی که قرار می دهید اسمش را به درستی درج نکرده اید.