SQL-i võti VS-i esmane võti, mida on selgitatud MySQL-i süntaksinäidetega

Võõrvõti on võti, mida kasutatakse kahe tabeli linkimiseks. Välisvõtme piiranguga tabel (teise nimega "lastetabel") on ühendatud teise tabeliga (teise nimega "vanematabel"). Seos on lapstabeli välisvõtme piirangu ja vanemtabeli esmase võtme vahel.

Välisvõtme piiranguid kasutatakse tabelite järjepidevuse säilitamiseks. Näiteks kui vanematabeli kirje kustutatakse ja lapstabelis on kirjed, võib süsteem ka alamkirjed kustutada.

Need aitavad vältida ka ebatäpsete andmete sisestamist lapsetabelisse, nõudes, et iga lapsetabelisse sisestatud kirje jaoks oleks olemas vanematabelikirje.

Kasutamise näide

Selle juhendi jaoks vaatleme lähemalt õpilase (vanema) ja õpilase kontakti (lapse) tabeleid.

Vanem tabeli esmane võti

Pange tähele, et õpilaslaual on ühe veeru esmane võti studentID.

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) 

Lastelaua esmased ja võõrvõtmed

Õpilase kontaktteabe tabelis on üks esmane võti, mis on ka õpilase ID. Seda seetõttu, et kahe tabeli vahel on üks-ühele suhe. Teisisõnu eeldame, et ühe õpilase kohta on ainult üks õpilane ja üks üliõpilaste kontaktandmed.

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) 

Näidisaruanne, kasutades õpilase vanemate tabelit ja kontakt-lapse tabelit

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 | +-----------+------------------------+------------------+--------------------+--------------------+ 

Järeldus

Välisvõtme piirangud on suurepärane andmete terviklikkuse tööriist. Võtke aega, et neid hästi õppida.

Nagu kõigi nende SQL-i asjade puhul, on ka nendes palju rohkem kui selles sissejuhatavas juhendis.

Loodan, et see annab teile vähemalt alustamiseks piisavalt.

Palun lugege oma andmebaasihalduri juhendit ja nautige ise erinevaid võimalusi proovides.