How to Create Foreign Key Constraints in SQL

Als u eigenaar bent van een onderneming, moet u de waarde en behoefte aan gegevens in uw bedrijf hebben ondervonden. Het hebben van de middelen om databases op te slaan en te manipuleren voegt meer waarde toe aan het bedrijf.

Databases zijn volgens een bepaalde conventie georganiseerd en stellen je in staat gegevens in verbindingen te structureren, wat ons brengt bij relationele databases, die sinds de jaren zeventig zijn omarmd als een vorm van gegevensbeheer. En in de huidige markt hebben relationele databases de voorkeur vanwege hun mogelijkheden bij het manipuleren van gegevens.

Hoewel er veel beschikbare relationele databases zijn, is MySQL volgens Statista sinds januari 2022 de nummer twee van de wereld geworden.

In de SQL-server zijn beperkingen vooraf gedefinieerde regels en beperkingen die worden afgedwongen in een enkele of meerdere kolommen; ze zijn gekoppeld aan de waarden in de kolom en helpen bij het behouden van de integriteit, nauwkeurigheid en betrouwbaarheid van de gegevens in de opgegeven kolommen.

Simpel gezegd: alleen gegevens die aan de beperkingsregel voldoen, worden met succes in de kolom ingevoegd. De invoegbewerking wordt beëindigd als de gegevens niet aan de standards voldoen.

In dit bericht wordt ervan uitgegaan dat je relationele databases bent tegengekomen, met title MySQL, en dat je ernaar uitkijkt om je kennis op dit gebied te versterken. Uiteindelijk zal ik enkele ideas delen voor de interactie met International Key-beperkingen.

Primaire sleutelbeperkingen – een samenvatting

Een tabel in SQL omvat een of meerdere kolommen met sleutelwaarden die elke rij in de systemen nauwkeurig aanwijzen. De kolom of kolommen met de titel primaire sleutel (PK) van de tabel hebben de rol van het afdwingen van de entiteitsintegriteit van de tabel. Primaire sleutelbeperkingen garanderen unieke gegevens en worden vaak gedefinieerd in een identiteitskolom.

Wanneer u de primaire sleutelbeperkingen voor uw tabel opgeeft, legt de database-engine automatisch de uniciteit van gegevens op door unieke indexen te genereren voor elk van de primaire kolommen. Primaire sleutels bieden een extreem voordeel bij gebruik in question’s omdat ze snelle gegevenstoegang bieden.

Als er beperkingen voor de primaire sleutel zijn gedefinieerd voor meerdere kolommen, wordt dit een samengestelde of samengestelde primaire sleutel genoemd. En in dit geval kan elke primaire sleutelkolom dubbele waarden bevatten. De gecombineerde waarden van alle kolommen in de primaire sleutel moeten echter uniek zijn.

Een goed voorbeeld is een geval waarin u een tabel met kolommen ` heeftID kaart‘, ‘namen’ en ‘leeftijd`. Wanneer u de primaire sleutelbeperking definieert voor de combinatie van `ID kaart‘ en ‘namen`, kunt u dubbele exemplaren van `ID kaart` of `namen` waarden. Toch moet elke combinatie uniek zijn om dubbele rijen te voorkomen. U kunt dus data hebben met `ID=1‘ en ‘naam=Walter‘, en ‘leeftijd-22 “en `ID=1‘, ‘naam=Hendrik‘ en ‘leeftijd = 27`, maar u kunt geen andere data hebben met `ID=1‘ en ‘naam=Walter` omdat de combinatie niet uniek is.

Hier zijn enkele essentiële aspecten die u moet weten:

  1. Een tabel bevat slechts één primaire sleutelbeperking.
  2. Primaire sleutels mogen niet langer zijn dan 16 kolommen en mogen niet langer zijn dan 900 tekens.
  3. De indexen die door primaire sleutels worden gegenereerd, kunnen de indexen in de tabel verhogen. Het aantal geclusterde indexen in een tabel magazine echter niet groter zijn dan 1, en het aantal niet-geclusterde indexen in een tabel is beperkt tot 999.
  4. Wanneer geclusterd en niet-geclusterd niet zijn opgegeven voor een sleutelbeperking, wordt automatisch geclusterd genomen.
  5. Alle kolommen die binnen een primaire sleutelbeperking zijn gedeclareerd, moeten als niet null worden gedefinieerd. Als dit niet het geval is, wordt de nulwaarde van alle kolommen die in de beperking zijn gekoppeld, robotisch ingesteld op niet nul.
  6. Wanneer primaire sleutels worden gedefinieerd op een door de gebruiker gedefinieerd kolomtype Widespread Language Runtime (CLR), moet de type-implementatie binaire volgorde ondersteunen.

Beperkingen op buitenlandse sleutels – een overzicht

Een externe sleutel (FK) omvat een kolom of een combinatie van meerdere die wordt gebruikt om een ​​koppeling tussen twee tabellen te maken en te binden en de gegevens te beheren die in een externe sleuteltabel moeten worden opgeslagen.

Een verwijzing naar een externe sleutel houdt in dat er een koppeling tussen twee tabellen wordt gemaakt; wanneer naar een kolom of kolommen met de primaire sleutel voor een andere tabel wordt verwezen door een kolom of kolommen in een andere tabel.

In het referentiescenario met externe sleutels wordt er een verbinding tot stand gebracht tussen twee tabellen wanneer naar een kolom of kolommen met primaire sleutels in een tabel wordt verwezen door kolommen in een andere tabel.

In een praktisch gebruiksscenario kunt u een tafel hebben, Gross sales.SalesOrderHeadermet een externe sleutel die naar een andere tabel linkt, Gross sales. Particular personomdat er een logische relatie bestaat tussen verkopers en verkooporders.

Hier de SalesPersonID in de kolom SalesOrderHeader combineert met de primaire sleutelkolom van de SalesPerson tafel. De SalesPerson desk externe sleutel is de SalesPersonID kolom in de SalesOrderHeader.

Deze relatie definieert een regel: SalesPersonID waarde kan niet in jou zitten SalesOrderHeader tabel als deze niet bestaat in de SalesPerson tafel.

Een tabel kan naar maximaal 253 andere kolommen en tabellen verwijzen als externe sleutels, ook wel uitgaande referenties genoemd. Sinds 2016 heeft de SQL-server het aantal tabellen en kolommen waarnaar u kunt verwijzen in een enkele tabel, ook wel inkomende verwijzingen genoemd, verhoogd van 253 naar 10.000. Aan deze toename zijn echter enkele beperkingen verbonden:

  1. Externe sleutelreferenties groter dan 253 zijn alleen beschikbaar voor de DELETE DML-bewerkingen. MERGE en UPDATE worden niet ondersteund.
  2. Tabellen met refererende sleutelreferenties naar zichzelf mogen maximaal 253 refererende sleutelreferenties bevatten.
  3. Voor column-store-indexen, voor geheugen geoptimaliseerde tabellen en gepartitioneerde refererende-sleuteltabellen zijn refererende-sleutelreferenties beperkt tot 253.

Wat zijn de voordelen van buitenlandse sleutels?

Zoals eerder vermeld spelen externe sleutelbeperkingen een essentiële rol bij het waarborgen van de integriteit en gegevensconsistentie in de relationele database. Hier volgt een overzicht van de redenen waarom beperkingen voor externe sleutels essentieel zijn.

  1. Referentiële integriteit – Beperkingen voor externe sleutels garanderen dat elk onderliggende tabelrecord overeenkomt met een primair tabelrecord, waardoor gegevensconsistentie in beide tabellen wordt gegarandeerd.
  2. Voorkomen van verweesde data – Als u een bovenliggende tabel verwijdert, zorgen beperkingen voor externe sleutels ervoor dat de bijbehorende onderliggende tabel ook wordt verwijderd, waardoor exemplaren van verweesde data worden voorkomen die tot gegevensinconsistentie kunnen leiden.
  3. Verbeterde prestatie – Beperkingen voor externe sleutels verbeteren de prestaties van question’s doordat het databasebeheersysteem question’s kan optimaliseren op foundation van tabelrelaties.

Indexen van International Key-beperkingen

Beperkingen voor externe sleutels creëren niet automatisch overeenkomstige indexen zoals de primaire. U kunt handmatig indexen maken voor beperkingen van externe sleutels; het is nuttig om de volgende redenen.

  • Kolommen met externe sleutels worden vaak gebruikt in de samenvoegingscriteria bij het combineren van gegevens uit gerelateerde tabellen in question’s door de kolommen te matchen die aan de beperking zijn gekoppeld. Indexen helpen de database bij het vinden van bijbehorende gegevens in een vreemde tabel.
  • Als u de beperkingen van de primaire sleutel wijzigt, worden deze gecontroleerd met de vreemde beperkingen in gerelateerde tabellen.

Het is niet verplicht om indexen te maken. U kunt nog steeds gegevens uit twee tabellen combineren zonder de primaire en externe sleutelbeperkingen op te geven. Door beperkingen voor externe sleutels toe te voegen, worden de tabellen echter geoptimaliseerd en gecombineerd in een question die voldoet aan de standards voor het gebruik van de sleutels. Als u de beperkingen van de primaire sleutel wijzigt, worden deze gecontroleerd met de buitenlandse beperkingen in gerelateerd.

Suggestions voor het maken van beperkingen voor externe sleutels in SQL

U heeft al veel tijd aan de speculatie besteed; antwoordde op het waarom. Laten we onze focus verleggen en beperken tot de tactieken voor het creëren van externe sleutelbeperkingen; antwoord op het hoe.

Een ‘International Key’-veld in een tabel verwijst naar de ‘Major Key’ van een andere tabel. De tabel met de primaire sleutel is uw bovenliggende tabel. En de tabel met de externe sleutel wordt de kindertabel genoemd. Laten we erin duiken.

Een externe sleutel maken tijdens het maken van een tabel

Wanneer u een tabel maakt, kunt u ook een beperking voor externe sleutels instellen om de referentiële integriteit te handhaven. Hier leest u hoe u het moet doen:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES clients(customer_id)
);

De bovenstaande code maakt een tabel met de naam ‘orders’ met de primaire gehele sleutel ‘order_id’, een ander geheel getal ‘customer_id’ en de datum ‘order_date’. In dit geval wordt de FOREIGN KEY-beperking toegevoegd aan de kolom ‘klant_id’ en verwijst deze naar de ‘klant_id’ in uw tabel ‘klanten’.

Een externe sleutel maken na het maken van een tabel

Stel dat u al een tabel hebt gemaakt en een beperking voor externe sleutels wilt toevoegen; gebruik de `WIJZIG TABEL`-instructie in uw code. Bekijk het onderstaande codefragment.

ALTER TABLE orders
ADD FOREIGN KEY (customer_id) REFERENCES clients(customer_id);

In dit geval heeft u de kolom ‘klant_id’ met de refererende sleutel toegevoegd aan de tabel ‘bestellingen’ om te verwijzen naar de kolom ‘klant_id’ in de tabel ‘klanten’.

Een externe sleutel maken zonder te controleren op bestaande gegevens

Wanneer u een beperking voor externe sleutels aan een tabel toevoegt, controleert de database automatisch op bestaande gegevens om consistentie met de beperking te garanderen. Als u echter weet dat de gegevens constant zijn en u een beperking wilt toevoegen zonder de consistentiecontrole, kunt u dit als volgt doen.

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES clients(customer_id)
NOT VALIDATE;

De NOT VALIDATE commando vertelt de database om niet te controleren op bestaande gegevens. Dit specifieke geval is nuttig in specifieke gevallen. Bijvoorbeeld wanneer u over enorme hoeveelheden gegevens beschikt en het validatieproces wilt voltooien.

Een externe sleutel maken by way of DELETE/UPDATE

Terwijl u beperkingen voor externe sleutels maakt, kunt u bepalen welke actie moet worden ondernomen in gevallen waarin de rij waarnaar wordt verwezen, wordt bijgewerkt of verwijderd. In dit geval gebruikt u trapsgewijze referentiële-integriteitsbeperkingen om de te ondernemen acties te dicteren. Ze bevatten:

#1. GEEN ACTIE

Internet als bij veel andere databases is de regel ‘GEEN ACTIE’ het standaardgedrag wanneer u een externe sleutelbeperking maakt. Dit betekent dat er geen actie wordt ondernomen wanneer de rij waarnaar wordt verwezen, wordt verwijderd of bijgewerkt.

De database-engine geeft een foutmelding als de beperking van de refererende sleutel wordt geschonden. Dit wordt echter niet aanbevolen, omdat dit kan leiden tot problemen met de referentiële integriteit, omdat de externe sleutelbeperking moet worden afgedwongen. Hier is een voorbeeld van hoe u dit moet doen:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES clients(customer_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

#2. CASCADE

De ‘CASCADE’-regel is een andere optie voor de acties ‘ON DELETE’ en ‘ON UPDATE’ bij het maken van refererende-sleutelbeperkingen. Wanneer dit wordt ingevoerd, betekent dit dat wanneer een rij wordt bijgewerkt of verwijderd in de bovenliggende tabellen, de rijen waarnaar wordt verwezen, dienovereenkomstig worden bijgewerkt of verwijderd. Deze techniek is krachtig bij het behouden van referentiële integriteit. Hier is een voorbeeld:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES clients(customer_id)
ON DELETE CASCADE
ON UPDATE CASCADE;

U moet voorzichtig zijn bij het gebruik van deze regel, omdat deze ongewenste gevolgen kan hebben als deze niet zorgvuldig wordt toegepast. U wilt voorkomen dat u per ongeluk te veel gegevens verwijdert of kringverwijzingen maakt. Gebruik deze optie daarom alleen als het nodig is en met de nodige voorzichtigheid.

Er zijn enkele regels voor het gebruik van CASCADE:

  • U kunt CASCADE niet opgeven als een tijdstempelkolom deel uitmaakt van de externe sleutel of waarnaar wordt verwezen.
  • Als uw tabel een INSTEAD OF DELETE-trigger heeft, kunt u ON DELETED CASCADE niet opgeven.
  • U kunt ON UPDATE CASCADE niet opgeven als uw tabel een INSTEAD OF UPDATE-trigger heeft.

#3. SET NUL

Wanneer u een corresponderende rij in de bovenliggende tabel verwijdert of bijwerkt, worden alle waarden waaruit de refererende sleutel bestaat, ingesteld op nul. Deze beperkingsregel vereist dat kolommen met externe sleutels null kunnen worden uitgevoerd en kunnen niet worden opgegeven voor tabellen met INSTEAD OF UPDATE-triggers. Hier is een voorbeeld van hoe u het moet doen.

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES clients(customer_id)
ON DELETE SET NULL
ON UPDATE SET NULL

In dit geval heeft u de refererende sleutelkolom ‘customer_id’ in de tabel ‘orders’ op nul gezet als de overeenkomstige rij in de tabel ‘klanten’ wordt verwijderd of bijgewerkt.

#4. STANDAARD INSTELLEN

Hier stelt u alle waarden in die de refererende sleutel standaard maken, op voorwaarde dat de rij waarnaar wordt verwezen in de bovenliggende tabel wordt bijgewerkt of verwijderd.

Deze beperking wordt uitgevoerd als alle kolommen met externe sleutels standaarddefinities hebben. Als een kolom null kan worden gemaakt, wordt de standaardwaarde ingesteld op NULL. Houd er rekening mee dat deze optie niet kan worden opgegeven voor tabellen met INSTEAD OF UPDATE-triggers. Hier is een voorbeeld:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers
FOREIGN KEY (customer_id)
REFERENCES clients(customer_id)
ON DELETE SET DEFAULT
ON UPDATE SET DEFAULT;

In het bovenstaande geval heeft u de ‘customer_id’ in de tabel ‘orders’ ingesteld op de standaardwaarde, wat gebeurt wanneer de overeenkomstige rij in de tabel ‘klanten’ wordt verwijderd of bijgewerkt.

Laatste woorden

In deze handleiding heeft u een opfriscursus gehad over de beperkingen van primaire sleutels en heeft u zich verdiept in de beperkingen van externe sleutels. U bent ook verschillende technieken tegengekomen om beperkingen voor externe sleutels te creëren. En hoewel er veel manieren zijn om externe sleutelbeperkingen te creëren, heeft dit bericht de methoden ontrafeld.

En hopend dat je nieuwe technieken onder de knie hebt; je bent niet beperkt tot het combineren ervan. De beperkingsmethoden CASCADE, SET NULL, SET DEFAULT en NO ACTION kunnen bijvoorbeeld worden gecombineerd op tabellen met referentiële relaties.

Als uw tabel GEEN ACTIE tegenkomt, keert deze terug naar andere beperkingsregels. In andere gevallen kan een DELETE-actie een combinatie van deze regels activeren, en wordt de NO ACTION-regel als laatste uitgevoerd.

Bekijk vervolgens het SQL-spiekbriefje.

Leave a Comment

porno izle altyazılı porno porno