93 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: SQL Foreign Key Constraint | ||
|  | localeTitle: SQL الخارجية مفتاح القيد | ||
|  | --- | ||
|  | ## SQL الخارجية مفتاح القيد
 | ||
|  | 
 | ||
|  | المفتاح الخارجي هو مفتاح يستخدم لربط جدولين. يتم ربط الجدول مع "مفتاح خارجي" (الملقب "جدول الطفل") إلى جدول آخر (aka ، "الجدول الأصل"). يقع الاتصال بين قيد المفتاح الخارجي في الجدول الفرعي والمفتاح الأساسي للجدول الأصل. | ||
|  | 
 | ||
|  | يتم استخدام قيود المفتاح الخارجي للمساعدة في الحفاظ على التناسق بين الجداول. على سبيل المثال ، إذا تم حذف سجل الجدول الأصل وكان الجدول الفرعي يحتوي على سجلات ، يمكن للنظام أيضًا حذف السجلات الفرعية. | ||
|  | 
 | ||
|  | كما أنها تساعد على منع إدخال بيانات غير دقيقة في الجدول التابع من خلال المطالبة بسجل جدول أساسي لكل سجل تم إدخاله في الجدول التابع. | ||
|  | 
 | ||
|  | ### مثال على الاستخدام
 | ||
|  | 
 | ||
|  | بالنسبة إلى هذا الدليل ، سنلقي نظرة عن قرب على جداول الطلاب (الوالدين) وطالب الاتصال (الطفل). | ||
|  | 
 | ||
|  | ### المفتاح الأساسي للجدول الأصل
 | ||
|  | 
 | ||
|  | لاحظ أن جدول الطالب يحتوي على مفتاح أساسي عمود واحد للطالب. | ||
|  | 
 | ||
|  |  `SHOW index FROM student;  | ||
|  | `  | ||
|  | 
 | ||
|  |  `+---------+------------+----------+--------------+-------------+  | ||
|  |  | Table   | Non_unique | Key_name | Seq_in_index | Column_name |  | ||
|  |  +---------+------------+----------+--------------+-------------+  | ||
|  |  | student |          0 | PRIMARY  |            1 | studentID   |  | ||
|  |  +---------+------------+----------+--------------+-------------+  | ||
|  |  1 row in set (0.00 sec) (some columns removed on the right for clarity)  | ||
|  | `  | ||
|  | 
 | ||
|  | ### مفاتيح الجدول الأساسي والأجنبي للطفل
 | ||
|  | 
 | ||
|  | يحتوي جدول معلومات الاتصال الخاصة بالطالب على مفتاح أساسي واحد وهو أيضًا الطالب الطالب. هذا لأن هناك علاقة رأس برأس بين الجدولين. وبعبارة أخرى ، فإننا نتوقع أن يكون هناك طالب واحد فقط وسجل طالب واحد لكل طالب. | ||
|  | 
 | ||
|  |  ``SHOW index FROM `student-contact-info`;  | ||
|  | ``  | ||
|  | 
 | ||
|  |  `+----------------------+------------+----------+--------------+-------------+  | ||
|  |  | Table                | Non_unique | Key_name | Seq_in_index | Column_name |  | ||
|  |  +----------------------+------------+----------+--------------+-------------+  | ||
|  |  | student-contact-info |          0 | PRIMARY  |            1 | studentID   |  | ||
|  |  +----------------------+------------+----------+--------------+-------------+  | ||
|  |  1 row in set (0.00 sec) (some columns removed on the right for clarity)  | ||
|  | `  | ||
|  | 
 | ||
|  |  `SELECT concat(table_name, '.', column_name) AS 'foreign key',  | ||
|  |  concat(referenced_table_name, '.', referenced_column_name) AS 'references'  | ||
|  |  FROM information_schema.key_column_usage  | ||
|  |  WHERE referenced_table_name IS NOT NULL  | ||
|  |  AND table_schema = 'fcc_sql_guides_database'  | ||
|  |  AND table_name = 'student-contact-info';  | ||
|  | `  | ||
|  | 
 | ||
|  |  `+--------------------------------+-------------------+  | ||
|  |  | foreign key                    | references        |  | ||
|  |  +--------------------------------+-------------------+  | ||
|  |  | student-contact-info.studentID | student.studentID |  | ||
|  |  +--------------------------------+-------------------+  | ||
|  |  1 row in set (0.00 sec)  | ||
|  | `  | ||
|  | 
 | ||
|  | ### مثال على التقرير باستخدام جدول الطالب الرئيسي والجدول الفرعي للاتصال
 | ||
|  | 
 | ||
|  |  ``SELECT a.studentID, a.FullName, a.programOfStudy,  | ||
|  |  b.`student-phone-cell`, b.`student-US-zipcode`  | ||
|  |  FROM student AS a  | ||
|  |  JOIN `student-contact-info` AS b ON a.studentID = b.studentID;  | ||
|  | ``  | ||
|  | 
 | ||
|  |  `+-----------+------------------------+------------------+--------------------+--------------------+  | ||
|  |  | studentID | FullName               | programOfStudy   | student-phone-cell | student-US-zipcode |  | ||
|  |  +-----------+------------------------+------------------+--------------------+--------------------+  | ||
|  |  |         1 | Monique Davis          | Literature       | 555-555-5551       |              97111 |  | ||
|  |  |         2 | Teri Gutierrez         | Programming      | 555-555-5552       |              97112 |  | ||
|  |  |         3 | Spencer Pautier        | Programming      | 555-555-5553       |              97113 |  | ||
|  |  |         4 | Louis Ramsey           | Programming      | 555-555-5554       |              97114 |  | ||
|  |  |         5 | Alvin Greene           | Programming      | 555-555-5555       |              97115 |  | ||
|  |  |         6 | Sophie Freeman         | Programming      | 555-555-5556       |              97116 |  | ||
|  |  |         7 | Edgar Frank "Ted" Codd | Computer Science | 555-555-5557       |              97117 |  | ||
|  |  |         8 | Donald D. Chamberlin   | Computer Science | 555-555-5558       |              97118 |  | ||
|  |  +-----------+------------------------+------------------+--------------------+--------------------+  | ||
|  | `  | ||
|  | 
 | ||
|  | ### استنتاج
 | ||
|  | 
 | ||
|  | قيود المفتاح الخارجي هي أداة تكامل بيانات رائعة. خذ الوقت الكافي لتعلمها جيداً. | ||
|  | 
 | ||
|  | كما هو الحال مع كل هذه الأشياء SQL هناك أكثر من ذلك بكثير من ما هو موجود في هذا الدليل التمهيدي. | ||
|  | 
 | ||
|  | آمل أن يمنحك هذا على الأقل ما يكفي للبدء. | ||
|  | 
 | ||
|  | يرجى الاطلاع على دليل مدير قاعدة البيانات الخاص بك والمتعة محاولة خيارات مختلفة بنفسك. |