SQL-i võõrvõtme tutvustus

Võõrvõti on SQL-i piirang. Seda kasutatakse kahe tabeli seostamiseks. Ühes tabelis olev võõrvõti osutab teise tabeli primaarvõtmele. Võõra võtmega saab veenduda, et ühe tabeli real on vastavad read / read teises tabelis. Viidatud tabelit nimetatakse põhitabeliks ja võõra võtmega tabelit nimetatakse alatabeliks. See vanema ja lapse suhe jõustab reegli, mida tuntakse kui soovituslikku terviklikkust. Soovituslik terviklikkus on andmete omadus, mis kinnitab, et kõik nende viited on kehtivad.

Niisiis, kui teil on andmebaasis suhteid ühelt-mitmele või paljudest-paljudele, on võõrvõtmed väga kasulikud. See toimib ristviitena kahe tabeli vahel (lapsevanema tabel ja lapse tabel), kuna see viitab teise tabeli primaarvõtmele. Nii loob see seose vanema_tabeli ja lapselaua vahel.

Süntaks

Uue tabeli loomiseks võõra võtmega on vaja andmebaasis CREATE TABLE luba

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (parent_column1, parent_column2, … parent_column_n)
( ON DELETE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) ( ON UPDATE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) );

  • Lapse nimi on tabeli nimi, mille me loome
  • kolonn_1, veerg_2 - tabelisse lisatavad veerud.
  • F_klahv - see on võõra võtme piirang.
  • laps_veerg1, lapse_veerg2… laps_veerg_n - see on lapse_Tabelveergude nimi, mis viitavad vanemtabeli peamisele võtmele.
  • Parent_Table - see on vanema_tabeli nimi. Vanematabeli peamisele võtmele viidatakse lapsetabelis
  • ON DELETE - see parameeter võtab pärast lapsevanemate andmete kustutamist kasutusele lapseandmetega seotud toimingud. SET NULL, NO ACTION, CASCADE, SET DEFAULT on selle parameetri mõned väärtused.
  • ON UPDATE - see on valikuline parameeter, mis võtab lapseandmetega pärast vanemandmete värskendamist meetmeid. SET NULL, NO ACTION, CASCADE, SET DEFAULT on selle parameetri mõned väärtused.
  • CASCADE - saame seda kasutada koos ON DELETE ja ON UPDATE. Pärast vanemate andmete kustutamist või värskendamist lapse andmed kas kustutatakse või värskendatakse.

Olemasolevasse tabelisse võõra võtme loomiseks on vaja ALTER-i luba tabelil kasutada.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

Reeglid

  1. Võõrad võtmed ei kehti ajutiste tabelite jaoks.
  2. Võõra võtme piirang ei pea olema lingitud ainult mõne teise tabeli primaarvõtmega, seda saab siduda ka mõne teise tabeli ainulaadse piiranguga.
  3. VÄLISVÕTME piirangud võivad viidata sama tabeli teisele veerule. Seda nimetatakse eneseviiteks.
  4. Võõra võtme piirangud võivad viidata sama andmebaasi tabelitele.
  5. Lapsetabelisse saame sisestada ka NULL-väärtusi.
  6. Kui lisame võõrvõtme kitsendusse muu kui NULL-i väärtuse, peab väärtus eksisteerima viidatud veeru teistes rikkumisteadetes.
  7. Vanema unikaalsete võtmete väärtust ei saa muuta, kui värskenduseeskiri on RESTRICT ja seal on üks või mitu sõltuvat rida. Kui värskendamisreegel on MITTE TEGEMINE, saab vanemlikke unikaalseid võtmeid värskendada seni, kuni värskenduse valmimise ajaks on igal lapsel vanemvõti.

Näited

Oletame, et meil on kaks tabelit - Kliendid ja Tellimused. Klientide tabelis on kõik kliendiga seotud andmed ja tellimuste tabelis on klientide tellimustega seotud andmed.

Kliendid

Cust_idEsmane võti
Kliendi_nimi
Asukoht

Tellimused

Tellimuse IDEsmane võti
Tellimiskuupäev
Kogus
Cust_idVõõrvõti
Kogu summa

Ülaltoodud näites on tabeli ORDERS veerg Cust_id võõras võti, mis osutab tabeli KLIENDID veerule Cust_id.

Oletame, et neil tabelitel on järgmised väärtused

Kliendid

1001AlexUSA
1002CareyUSA
1003SidSuurbritannia
1004TomAUS
1005KapilIND

Tellimused

7820-10-2018510021200
7912-10-201741001800
8020-11-201621005369
8109-10-201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
8502-01-201621002260

Tellimuse tabelis on cust_id 1001 jaoks kolm tellimust.

Kliendi jaoks cust_id 1003 tellimust ei ole.

Nii et kui meil on vanemate tabelis konkreetseid andmeid (öelge id 1003), siis ei ole vaja neid andmeid lapsetabelisse lisada, vaid vastupidi, see pole tõsi.

Tabelis Laps (tellimuste tabel) ei saa olla andmeid, mida vanemtabelis (Kliendid) pole.

Näiteks ei saa me sisestada tabelisse tellimusi uut rekordit cust_id 1006, kuna cust_id 1006 pole tabelis Kliendid.

Allpool on toodud näited, mis rikuvad selle suhte referentslikku terviklikkust:

  1. Rea sisestamine tabelisse ORDERS, kus Cust_ID ei kuvata tabeli KLIENDID veerus Cust_ID.
  2. Rea kustutamine tabelist KLIENDID, kus kustutatava rea ​​Cust_ID on endiselt tabeli ORDERS veerus Cust_ID.

Kui konkreetne kirje põhitabelist kustutatakse, on alamtabeli andmete terviklikkuse säilitamiseks kaks võimalust. Kui kaks tabelit on ühendatud võõrvõtmega ja mõned põhitabeli andmed kustutatakse, mille kohta kirje on olemas ka alamtabelis, on meil olemas mehhanism alamtabeli andmete terviklikkuse salvestamiseks

  • Kaskaadi kustutamise korral : see kirje kustutatakse alatabelist, kui võõrvõtme väärtus kustutatakse põhitabelist.
  • Sisselülitamisel Kustuta NULL: see seab kõik lapsetabeli kirje väärtused väärtuseks NULL, mille jaoks võõra võtme väärtus kustutatakse põhitabelist.

Järeldus - võõrvõti SQL-is

Seega on soovitatav kasutada andmebaasis Foreign Key võõrvõtit, millel on üks kuni üks või üks kuni palju suhteid. Võõraste võtmepiirangute kasutamise peamine eelis on see, et see parandab jõudlust. Arendajad saavad andmebaasi struktuuri hõlpsalt tuvastada. Samuti saame uurida, kuidas päring andmeid hangib.

Soovitatavad artiklid

See on SQL-i võõrvõtme juhend. Siin arutame süntaksiga SQL-i võõrvõtme reegleid ja näiteid. Võite lisateabe saamiseks vaadata ka järgmisi artikleid -

  1. SQL vaated
  2. Liitumiste tüübid SQL Serveris
  3. Mis on PL / SQL?
  4. SQL Serveri piirangud
  5. MySQL-i 6 parimat liitumistüüpi koos näidetega