Inleiding tot buitenlandse sleutel in SQL

Foreign Key is een beperking in SQL. Het wordt gebruikt om de twee tabellen te relateren. Een externe sleutel in de ene tabel verwijst naar een primaire sleutel in een andere tabel. Een externe sleutel kan worden gebruikt om ervoor te zorgen dat de rij in de ene tabel overeenkomstige rij / rijen in een andere tabel heeft. De tabel waarnaar wordt verwezen, wordt de bovenliggende tabel genoemd en de tabel met de externe sleutel staat bekend als de onderliggende tabel. Deze ouder-kindrelatie dwingt de regel af die bekend staat als Referentiële Integriteit. Referentiële integriteit is een eigenschap van gegevens waarin staat dat alle referenties geldig zijn.

Als u dus 1-op-veel of veel-op-veel-relaties in de database hebt, zijn buitenlandse sleutels erg handig. Het fungeert als een kruisverwijzing tussen twee tabellen (parent_table en child_table) omdat het verwijst naar de primaire sleutel van een andere tabel. Het legt dus een verband tussen bovenliggende tabel en onderliggende tabel.

Syntaxis

Voor het maken van een nieuwe tabel met een externe sleutel is de machtiging CREATE TABLE in de database vereist

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 ) ) );

  • Child_Table is de tabelnaam die we gaan maken
  • column_1, column_2- de kolommen die aan de tabel moeten worden toegevoegd.
  • F_key- Dit is een beperking voor een externe sleutel.
  • child_column1, child_column2… child_column_n- Het is de naam van child_Table kolommen om naar de primaire sleutel in de bovenliggende tabel te verwijzen.
  • Parent_Table- Dit is de naam van parent_table. De primaire sleutel van parent_table wordt verwezen in child_table
  • ON DELETE- Deze parameter onderneemt actie over onderliggende gegevens na het verwijderen van bovenliggende gegevens. SET NULL, NO ACTION, CASCADE, SET DEFAULT zijn enkele van de waarden van deze parameter.
  • OP UPDATE - Dit is een optionele parameter die actie onderneemt op de onderliggende gegevens na update van de bovenliggende gegevens. SET NULL, NO ACTION, CASCADE, SET DEFAULT zijn enkele van de waarden van deze parameter.
  • CASCADE - We kunnen dit samen gebruiken met ON DELETE en ON UPDATE. Na het verwijderen of bijwerken van bovenliggende gegevens De onderliggende gegevens worden verwijderd of bijgewerkt.

Voor het maken van een externe sleutel in een bestaande tabel is ALTER-machtiging voor de tabel vereist.

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

Reglement

  1. Buitenlandse sleutels zijn niet van toepassing op tijdelijke tabellen.
  2. Buitenlandse sleutelbeperking hoeft niet alleen te worden gekoppeld aan de primaire sleutel van een andere tabel, maar kan ook worden gekoppeld aan de UNIEKE beperking van een andere tabel.
  3. BUITENLANDSE SLEUTELbeperkingen kunnen verwijzen naar een andere kolom in dezelfde tabel. Dit wordt een zelfreferentie genoemd.
  4. Beperkingen voor externe sleutels kunnen verwijzen naar de tabellen in dezelfde database.
  5. We kunnen ook NULL-waarden in de onderliggende tabel invoegen.
  6. Wanneer we een andere waarde dan de NULL-waarde invoegen in de externe sleutelbeperking, moet de waarde bestaan ​​in de kolom waarnaar anders wordt verwezen.
  7. De waarde van de unieke sleutels van de ouder kan niet worden gewijzigd als de updateregel RESTRICT is en er een of meer afhankelijke rijen zijn. Als de updateregel GEEN ACTIE is, kunnen unieke bovenliggende sleutels worden bijgewerkt zolang elk kind een bovenliggende sleutel heeft tegen de tijd dat de update-instructie is voltooid.

Voorbeelden

Stel dat we twee tabellen Klanten en Bestellingen hebben. De tabel Klanten bevat alle klantgerelateerde gegevens en de tabel Orders met klantordergerelateerde gegevens.

Klanten

cust_idHoofdsleutel
cust_name
Plaats

bestellingen

Order IDHoofdsleutel
Besteldatum
Aantal
cust_idVreemde sleutel
Totale hoeveelheid

In het bovenstaande voorbeeld is de kolom Cust_id in de tabel ORDERS een externe sleutel die verwijst naar de kolom Cust_id in de tabel CUSTOMERS.

Laten we aannemen dat deze tabellen de volgende waarden hebben

Klanten

1001AlexONS
1002CareyONS
1003SidUK
1004TomAUS
1005KapilIND

bestellingen

7820-10-2018510021200
792017/12/1041001800
8020-11-201621005369
812016/09/1051002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
852016/02/0121002260

Voor cust_id 1001 zijn er drie orders in de orderentabel.

Voor cust_id 1003 is er geen bestelling.

Dus als we bepaalde gegevens (Say id 1003) in de bovenliggende tabel hebben, is het niet nodig om die gegevens in de onderliggende tabel te hebben, maar omgekeerd is niet waar.

We kunnen geen gegevens in de onderliggende tabel (orderentabel) hebben die niet bestaat in de bovenliggende tabel (klanten).

We kunnen bijvoorbeeld geen nieuw record invoegen voor cust_id 1006 in de tabel Orders omdat cust_id 1006 niet bestaat in de tabel Klanten.

Dus hieronder zijn de voorbeelden die de referentiële integriteit van deze relatie schenden:

  1. Een rij invoegen in de tabel ORDERS waar Cust_ID niet wordt weergegeven in de kolom Cust_ID in de tabel CUSTOMERS.
  2. Een rij verwijderen uit de tabel KLANTEN waarbij de Cust_ID van de te verwijderen rij nog steeds aanwezig is in de kolom Cust_ID in de tabel ORDERS.

Wanneer een bepaald record uit de hoofdtabel wordt verwijderd, zijn er twee manieren om de integriteit van gegevens in de onderliggende tabel te behouden. Wanneer twee tabellen zijn verbonden met de externe sleutel en bepaalde gegevens in de hoofdtabel worden verwijderd, waarvoor het record ook in de onderliggende tabel bestaat, hebben we een mechanisme om de integriteit van gegevens in de onderliggende tabel op te slaan

  • Bij Cascade verwijderen : hiermee wordt het record uit de onderliggende tabel verwijderd als die waarde van de externe sleutel uit de hoofdtabel wordt verwijderd.
  • Bij NULL verwijderen: hiermee worden alle waarden in dat record van de onderliggende tabel ingesteld op NULL, waarvoor de waarde van de externe sleutel uit de hoofdtabel wordt verwijderd.

Conclusie - buitenlandse sleutel in SQL

Het is dus aan te raden om een ​​externe sleutel te gebruiken in de database die één op één of één op veel relaties heeft. Het belangrijkste voordeel van het gebruik van externe sleutelbeperkingen is dat het de prestaties verbetert. Ontwikkelaars kunnen gemakkelijk de structuur van de database identificeren. We kunnen ook onderzoeken hoe de query de gegevens gaat ophalen.

Aanbevolen artikelen

Dit is een handleiding voor buitenlandse sleutels in SQL. Hier bespreken we de regels en voorbeelden van buitenlandse sleutels in SQL met de syntaxis. U kunt ook de volgende artikelen bekijken voor meer informatie -

  1. SQL-weergaven
  2. Typen joins in SQL Server
  3. Wat is PL / SQL?
  4. SQL Server-beperkingen
  5. Top 6 soorten joins in MySQL met voorbeelden