Sådan oprettes udenlandske nøglebegrænsninger i SQL

Hvis du ejer en virksomhed, skal du være stødt på værdien og behovet for data i din virksomhed. At have midlerne til at gemme og manipulere databaser tilføjer mere værdi til virksomheden.

Databaser er organiseret i en bestemt konvention og giver dig mulighed for at strukturere data i forbindelser, hvilket bringer os til relationelle databaser, som er blevet omfavnet som en form for datahåndtering siden 1970’erne. Og på dagens marked foretrækkes relationelle databaser på grund af deres muligheder, når de manipulerer data.

Mens der er mange tilgængelige relationelle databaser derude, har MySQL nået det førende, rangerende som verdens nummer to, ifølge Statista, fra januar 2022.

I SQL-serveren er begrænsninger foruddefinerede regler og begrænsninger, der håndhæves i enten en enkelt eller flere kolonner; de er knyttet til værdierne i kolonnen og hjælper med at opretholde integriteten, nøjagtigheden og pålideligheden af ​​de angivne kolonners data.

Kort sagt er det kun data, der opfylder begrænsningsreglen, der med succes indsættes i kolonnen. Indsættelsesoperationen afsluttes, hvis dataene ikke opfylder kriterierne.

Dette indlæg forudsætter, at du har stødt på relationelle databaser, specifikt – MySQL, og ser frem til at styrke din viden på domænet. Til sidst vil jeg dele nogle tips til at interagere med udenlandske nøglebegrænsninger.

Primære nøglebegrænsninger – et resumé

En tabel i SQL indebærer en kolonne eller flere, der indeholder nøgleværdier, der præcist udpeger hver række i systemerne. Kolonnen eller kolonnerne med titlen primær nøgle (PK) i tabellen har den rolle at håndhæve tabellens enhedsintegritet. Primære nøglebegrænsninger garanterer unikke data og er ofte defineret på en identitetskolonne.

Når du har angivet de primære nøglebegrænsninger for din tabel, pålægger databasemotoren automatisk dataentydighed ved at generere unikke indekser for hver af de primære kolonner. Primære nøgler giver en ekstrem fordel, når de bruges i forespørgsler ved at give hurtig dataadgang.

Hvis primærnøglebegrænsninger er defineret på flere kolonner, omtales det som en sammensat eller sammensat primærnøgle. Og i dette tilfælde kan hver primærnøglekolonne indeholde duplikerede værdier. Dog skal de kombinerede værdier fra alle kolonnerne i den primære nøgle være unikke.

Et godt eksempel er et tilfælde, hvor du har en tabel med kolonnerne “id”, “navne” og “alder”. Når du definerer dens primære nøglebegrænsning på kombinationen af ​​`id` og `navne`, kan du have dublerede forekomster af enten `id` eller `navne` værdier. Alligevel skal hver kombination være unik for at undgå duplikerede rækker. Så du kunne have poster med `id=1` og `name=Walter` og `age-22 “og `id=1`, `name=Henry` og `age=27`, men du kan ikke have andre poster med `id=1` og `navn=Walter`, fordi kombinationen ikke er unik.

  Hvordan finder man middelværdi, median og tilstand i Python?

Her er nogle vigtige aspekter at vide:

  • En tabel indeholder kun én primær nøglebegrænsning.
  • Primære nøgler må ikke overstige 16 kolonner og en maksimal længde på 900 tegn.
  • De indekser, der genereres af primærnøgler, kan øge dem i tabellen. Antallet af klyngede indekser i en tabel kan dog ikke overstige 1, og antallet af ikke-klyngede indekser i en tabel er begrænset til 999.
  • Når klyngede og ikke-klyngede er uspecificerede for en nøglebegrænsning, tages klynge automatisk.
  • Alle kolonner, der er erklæret inden for en primær nøglebegrænsning, skal defineres som ikke null. Hvis dette ikke er tilfældet, har alle kolonner, der er linket i begrænsningen, deres nullabilitet robotisk indstillet til ikke null.
  • Når primærnøgler er defineret på brugerdefineret kolonnetype (CLR), skal typeimplementeringen understøtte binær bestilling.
  • Udenlandske nøglebegrænsninger – en gennemgang

    En fremmednøgle (FK) indebærer en kolonne eller en kombination af flere, der bruges til at skabe og binde et link mellem to tabeller og administrerer de data, der skal lagres i en fremmednøgletabel.

    En fremmednøglereference indebærer oprettelse af et link mellem to tabeller; når en kolonne eller kolonner, der indeholder den primære nøgle til en anden tabel, bliver refereret af en kolonne eller kolonner i en anden tabel.

    I referencescenariet for fremmednøgle oprettes en forbindelse mellem to tabeller, når en eller flere kolonner, der indeholder primærnøgler i en tabel, refereres af kolonner i en anden.

    I et praktisk tilfælde kan du have en tabel, Sales.SalesOrderHeader, med en fremmednøgle, der linker til en anden tabel, Salg.Person, fordi der er et logisk forhold mellem sælgere og salgsordrer.

    Her blandes SalesPersonID’et i kolonnen SalesOrderHeader med den primære nøglekolonne i SalesPerson-tabellen. SalesPerson-tabellens fremmednøgle er SalesPersonID-kolonnen i SalesOrderHeader.

    Dette forhold definerer en regel: en SalesPersonID-værdi kan ikke være i din SalesOrderHeader-tabel, hvis den ikke findes i SalesPerson-tabellen.

    En tabel kan referere til op til 253 andre kolonner og tabeller som fremmednøgler, alternativt kaldet udgående referencer. Siden 2016 har SQL-serveren hævet antallet af tabeller og kolonner, du kan referere til i en enkelt tabel, også kendt som indgående referencer, fra 253 til 10.000. Stigningen kommer dog med nogle begrænsninger:

  • Fremmednøglereferencer, der overstiger 253, er kun tilgængelige for DELETE DML-operationerne. MERGE og UPDATE understøttes ikke.
  • Tabeller med fremmednøglereferencer til sig selv er til maks. 253 fremmednøglereferencer.
  • For kolonnelagerindekser, hukommelsesoptimerede tabeller og partitionerede fremmednøgletabeller er fremmednøglereferencer begrænset til 253.
  • Hvad er fordelene ved udenlandske nøgler?

    Som tidligere nævnt spiller fremmednøglebegrænsninger en væsentlig rolle i at sikre integriteten og datakonsistensen i relationsdatabasen. Her er en oversigt over årsagerne til, at begrænsninger af udenlandske nøgler er vigtige.

  • Referenceintegritet – Fremmednøglebegrænsninger garanterer, at hver underordnet tabelpost svarer til en primær tabelpost, hvilket sikrer datakonsistens på tværs af begge tabeller.
  • Forhindring af forældreløse poster – Hvis du sletter en overordnet tabel, sikrer fremmednøglebegrænsninger, at din tilknyttede underordnede tabel også slettes, hvilket forhindrer forekomster af forældreløse poster, der kan føre til datainkonsistens.
  • Forbedret ydeevne – Udenlandske nøglebegrænsninger øger forespørgselsydeevnen ved at tillade databasestyringssystemet at optimere forespørgsler baseret på tabelrelationer.
  •   Top 6 Cloud Data Warehouses i 2023

    Indekser af udenlandske nøglebegrænsninger

    Fremmednøglebegrænsninger opretter ikke automatisk tilsvarende indekser som det primære. Du kan manuelt oprette indekser for fremmednøglebegrænsninger; det er fordelagtigt af følgende årsager.

    • Fremmednøglekolonner bruges ofte i joinkriterierne, når data fra relaterede tabeller kombineres i forespørgsler ved at matche de kolonner, der er knyttet til begrænsningen. Indekser hjælper databasen med at finde tilknyttede data i en fremmed tabel.
    • Hvis du ændrer primærnøglebegrænsninger, kontrolleres de med de fremmede i relaterede tabeller.

    Det er ikke obligatorisk at oprette indekser. Du kan stadig kombinere data fra to tabeller uden at angive de primære og fremmede nøglebegrænsninger. Men tilføjelse af fremmednøglebegrænsninger optimerer tabellerne og kombinerer dem i en forespørgsel, der opfylder kriterierne for brug af nøglerne. Hvis du ændrer primærnøglebegrænsninger, kontrolleres de med de fremmede i relaterede.

    Tips til at oprette fremmednøglebegrænsninger i SQL

    Du har allerede brugt betydelig tid på spekulationerne; svarede på hvorfor. Lad os flytte vores fokus og indsnævre det til taktikken for at skabe udenlandske nøglebegrænsninger; svar på hvordan.

    Et `Foreign Key`-felt i en tabel refererer til en `Primary Key` for en anden. Tabellen med den primære nøgle er din overordnede tabel. Og tabellen med fremmednøglen kaldes underordnet tabel. Lad os dykke ind.

    Oprettelse af en fremmednøgle, mens du laver en tabel

    Når du opretter en tabel, kan du også oprette en fremmednøglebegrænsning for at opretholde referenceintegritet. Sådan gør du:

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

    Koden ovenfor opretter en tabel kaldet ‘ordrer’ med den primære heltalsnøgle ‘ordre_id’, et andet heltal ‘customer_id’ og datoen ‘order_date’. I dette tilfælde føjes FOREIGN KEY-begrænsningen til kolonnen ‘customer_id’ og refererer til ‘customer_id’ i din ‘customers’-tabel.

    Oprettelse af en fremmednøgle efter oprettelse af en tabel

    Antag, at du allerede har oprettet en tabel og ønsker at tilføje en fremmednøglebegrænsning; brug sætningen `ALTER TABLE` i din kode. Se kodestykket nedenfor.

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

    I dette tilfælde har du tilføjet en fremmednøglebegrænsning ‘customer_id’-kolonnen i ‘ordrer’-tabellen for at referere til ‘customer_id’-kolonnen i ‘customers’-tabellen.

    Oprettelse af en fremmednøgle uden at tjekke for eksisterende data

    Når du tilføjer en fremmednøglebegrænsning til en tabel, søger databasen automatisk for eksisterende data for at sikre overensstemmelse med begrænsningen. Men hvis du ved, at dataene er konsistente og ønsker at tilføje en begrænsning uden konsistenstjekket, er det her, hvordan du gør det.

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

    NOT VALIDATE-kommandoen fortæller databasen ikke at søge efter eksisterende data. Denne særlige sag er nyttig i specifikke tilfælde. For eksempel, når du har massive data og ønsker at gennemføre valideringsprocessen.

    Oprettelse af en fremmednøgle via DELETE/UPDATE

    Når du opretter begrænsninger for fremmednøgle, kan du dirigere den handling, der skal udføres i tilfælde, hvor den refererede række er opdateret eller slettet. I dette tilfælde bruger du kaskadende referenceintegritetsbegrænsninger til at diktere de handlinger, der skal udføres. De omfatter:

    #1. INGEN HANDLING

    Som med mange andre databaser er ‘INGEN HANDLING’-reglen standardadfærden, når du opretter en fremmednøglebegrænsning. Det betyder, at der ikke foretages nogen handling, når den refererede række slettes eller opdateres.

      Hvordan lærer man webapplikationssikkerhed?

    Databasemotoren frembringer en fejl, hvis den fremmede nøgle-begrænsning overtrædes. Dette anbefales dog ikke, fordi det kan føre til problemer med referenceintegritet, da begrænsningen af ​​den fremmede nøgle skal håndhæves. Her er et eksempel på, hvordan du gør det:

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

    #2. CASCADE

    ‘CASCADE’-reglen er en anden mulighed for handlingerne ‘ON SLET’ og ‘ON UPDATE’, når der oprettes fremmednøglebegrænsninger. Når den er på plads, betyder det, at hver gang en række opdateres eller slettes i de overordnede tabeller, bliver de refererede rækker opdateret eller slettet i overensstemmelse hermed. Denne teknik er kraftfuld, når den bibeholder referentiel integritet. Her er et eksempel:

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

    Du bør være ivrig, når du bruger denne regel, da den kan forårsage uønskede konsekvenser, hvis den ikke bruges omhyggeligt. Du vil gerne undgå at slette for mange data ved et uheld eller oprette cirkulære referencer. Brug derfor kun denne mulighed, hvis det er nødvendigt og med forsigtighed.

    Der er nogle regler for brug af CASCADE:

    • Du kan ikke angive CASCADE, hvis en tidsstempelkolonne enten er en del af den fremmede eller refererede nøgle.
    • Hvis din tabel har en ISTEDET FOR SLET-udløser, kan du ikke angive PÅ SLETTET CASCADE.
    • Du kan ikke angive ON UPDATE CASCADE, hvis din tabel har ISTEDET FOR UPDATE-trigger.

    #3. SÆT NULL

    Når du sletter eller opdaterer en tilsvarende række i den overordnede tabel, er alle værdier, der udgør fremmednøglen, sat til null. Denne begrænsningsregel kræver, at fremmednøglekolonner skal være nullbare til at udføre og kan ikke specificeres for tabeller med INSTEAD OF UPDATE-udløsere. Her er et eksempel på, hvordan man gør det.

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

    I dette tilfælde har du sat fremmednøglekolonnen ‘customer_id’ i “ordrer”-tabellen til at være null, hvis den tilsvarende række i “kunder”-tabellen slettes eller opdateres.

    #4. SÆT STANDARD

    Her indstiller du alle de værdier, der gør den fremmede nøgle til standard, forudsat at den refererede række i den overordnede tabel er opdateret eller slettet.

    Denne begrænsning udføres, hvis alle fremmednøglekolonner har standarddefinitioner. Hvis en kolonne er nullbar, er dens standardværdi sat til NULL. Bemærk, at denne indstilling ikke kan specificeres for tabeller med ISTED FOR OPDATERING-udløsere. Her er et eksempel:

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

    I ovenstående tilfælde har du sat ‘customer_id’ i “ordrer”-tabellen til dens standardværdi, hvilket sker, når den tilsvarende række i “kunder”-tabellen slettes eller opdateres.

    Afsluttende ord

    I denne vejledning har du fået en genopfriskning af primærnøglebegrænsninger og gravet i fremmednøglebegrænsninger. Du har også stødt på adskillige teknikker til at skabe fremmednøglebegrænsninger. Og selvom der er mange måder at skabe udenlandske nøglebegrænsninger på, har dette indlæg afsløret metoderne.

    Og håber du har fat i nye teknikker; du er ikke begrænset til at kombinere dem. For eksempel kan CASCADE, SET NULL, SET DEFAULT og NO ACTION begrænsningsmetoderne kombineres på tabeller med referencerelationer.

    Hvis din tabel støder på INGEN HANDLING, vender den tilbage til andre begrænsningsregler. I andre tilfælde kan en SLET-handling udløse en kombination af disse regler, og INGEN HANDLING-reglen vil blive kørt som den sidste.

    Tjek derefter SQL-snydearket.