Hvordan lage utenlandske nøkkelbegrensninger i SQL

Hvis du eier en bedrift, må du ha møtt verdien og behovet for data i virksomheten din. Å ha midler til å lagre og manipulere databaser gir mer verdi til virksomheten.

Databaser er organisert i en bestemt konvensjon og lar deg strukturere data i sammenhenger, og bringer oss til relasjonsdatabaser, som har blitt omfavnet som en form for databehandling siden 1970-tallet. Og i dagens marked foretrekkes relasjonsdatabaser på grunn av deres evner når de manipulerer data.

Mens det er mange tilgjengelige relasjonsdatabaser der ute, har MySQL gjort det til den ledende, rangert som verdens nummer to, ifølge Statista, fra januar 2022.

I SQL-serveren er begrensninger forhåndsdefinerte regler og begrensninger som håndheves i enten en enkelt eller flere kolonner; de er knyttet til verdiene i kolonnen og hjelper til med å opprettholde integriteten, nøyaktigheten og påliteligheten til de spesifiserte kolonnenes data.

Enkelt sagt, bare data som oppfyller begrensningsregelen blir satt inn i kolonnen. Innsettingsoperasjonen avsluttes hvis dataene ikke oppfyller kriteriene.

Dette innlegget forutsetter at du har møtt relasjonsdatabaser, spesifikt – MySQL, og ser frem til å styrke kunnskapen din på domenet. Til slutt vil jeg dele noen tips for samhandling med utenlandske nøkkelbegrensninger.

Primære nøkkelbegrensninger – en oppsummering

En tabell i SQL innebærer en kolonne eller flere som inneholder nøkkelverdier som presist peker på hver rad i systemene. Kolonnen eller kolonnene med tittelen primærnøkkel (PK) i tabellen har rollen som å håndheve entitetsintegriteten til tabellen. Primære nøkkelbegrensninger garanterer unike data og er ofte definert på en identitetskolonne.

Ved å spesifisere primærnøkkelbegrensningene for tabellen, pålegger databasemotoren automatisk dataunikhet ved å generere unike indekser for hver av primærkolonnene. Primærnøkler gir en ekstrem fordel når de brukes i spørringer ved å gi rask datatilgang.

Hvis primærnøkkelbegrensninger er definert på flere kolonner, refereres det til som en sammensatt eller sammensatt primærnøkkel. Og i dette tilfellet kan hver primærnøkkelkolonne inneholde dupliserte verdier. Imidlertid må de kombinerte verdiene fra alle kolonnene i primærnøkkelen være unike.

Et godt eksempel er et tilfelle der du har en tabell med kolonnene «id», «navn» og «alder». Når du definerer dens primærnøkkelbegrensning på kombinasjonen av `id` og `names`, kan du ha dupliserte forekomster av enten `id` eller `names` verdier. Likevel må hver kombinasjon være unik for å unngå dupliserte rader. Så du kan ha poster med «id=1» og «name=Walter», og «age-22» og «id=1», «name=Henry» og «age=27», men du kan ikke ha andre poster med `id=1` og `name=Walter` fordi kombinasjonen ikke er unik.

  6 beste pulsmålerapper for Apple Watch

Her er noen viktige aspekter å vite:

  • En tabell inneholder bare én primærnøkkelbegrensning.
  • Primærnøkler kan ikke overstige 16 kolonner og en maksimal lengde på 900 tegn.
  • Indeksene som genereres av primærnøkler kan øke de i tabellen. Antallet grupperte indekser i en tabell kan imidlertid ikke overstige 1, og antallet ikke-klyngede indekser i en tabell er begrenset til 999.
  • Når gruppert og ikke-klynget er uspesifisert for en nøkkelbegrensning, tas gruppert automatisk.
  • Alle kolonner som er deklarert innenfor en primærnøkkelbegrensning skal defineres som ikke null. Hvis dette ikke er tilfelle, vil alle kolonner som er koblet i begrensningen ha nullbarheten robotisk satt til ikke null.
  • Når primærnøkler er definert på brukerdefinert kolonnetype (CLR), må typeimplementeringen støtte binær rekkefølge.
  • Utenlandske nøkkelbegrensninger – en oversikt

    En fremmednøkkel (FK) innebærer en kolonne eller en kombinasjon av flere som brukes til å opprette og binde en kobling mellom to tabeller og administrerer dataene som skal lagres i en fremmednøkkeltabell.

    En fremmednøkkelreferanse innebærer å opprette en kobling mellom to tabeller; når en kolonne eller kolonner som inneholder primærnøkkelen for en annen tabell, blir referert av en eller flere kolonner i en annen tabell.

    I referansescenarioet for fremmednøkkel opprettes en forbindelse mellom to tabeller når en eller flere kolonner som inneholder primærnøkler i en tabell, refereres til av kolonner i en annen.

    I et praktisk brukstilfelle kan du ha en tabell, Sales.SalesOrderHeader, med en fremmednøkkel som kobler til en annen tabell, Salg.Person, fordi det er et logisk forhold mellom selgere og salgsordrer.

    Her blandes SalesPersonID-en i kolonnen SalesOrderHeader med primærnøkkelkolonnen i SalesPerson-tabellen. SalesPerson-tabellens fremmednøkkel er SalesPersonID-kolonnen i SalesOrderHeader.

    Dette forholdet definerer en regel: en SalesPersonID-verdi kan ikke være i SalesOrderHeader-tabellen hvis den ikke finnes i SalesPerson-tabellen.

    En tabell kan referere til opptil 253 andre kolonner og tabeller som fremmednøkler, alternativt kalt utgående referanser. Siden 2016 har SQL-serveren økt antallet tabeller og kolonner du kan referere til i en enkelt tabell, også kjent som innkommende referanser, fra 253 til 10 000. Økningen kommer imidlertid med noen begrensninger:

  • Fremmednøkkelreferanser som overstiger 253 er kun tilgjengelige for DELETE DML-operasjonene. MERGE og UPDATE støttes ikke.
  • Tabeller med fremmednøkkelreferanser til seg selv er til maks 253 fremmednøkkelreferanser.
  • For kolonnelagerindekser, minneoptimaliserte tabeller og partisjonerte fremmednøkkeltabeller, er fremmednøkkelreferanser begrenset til 253.
  • Hva er fordelene med utenlandske nøkler?

    Som nevnt tidligere, spiller utenlandske nøkkelbegrensninger en viktig rolle for å sikre integriteten og datakonsistensen i relasjonsdatabasen. Her er en oversikt over årsakene til at utenlandske nøkkelbegrensninger er avgjørende.

  • Referensiell integritet – utenlandske nøkkelbegrensninger garanterer at hver underordnede tabellpost tilsvarer en primær tabellpost, og sikrer datakonsistens på tvers av begge tabellene.
  • Forhindre foreldreløse poster – Hvis du sletter en overordnet tabell, sikrer fremmednøkkelbegrensninger at den tilknyttede underordnede tabellen også slettes, og forhindrer forekomster av foreldreløse poster som kan føre til datainkonsekvens.
  • Forbedret ytelse – Begrensninger for utenlandsk nøkkel øker søkeytelsen ved å la databasebehandlingssystemet optimalisere spørringer basert på tabellrelasjoner.
  •   8 måter å tjene penger på nett gjennom blogging

    Indekser for utenlandske nøkkelbegrensninger

    Utenlandske nøkkelbegrensninger oppretter ikke automatisk tilsvarende indekser som den primære. Du kan manuelt opprette indekser for fremmednøkkelbegrensninger; det er fordelaktig av følgende grunner.

    • Fremmednøkkelkolonner brukes ofte i sammenføyningskriteriene når man kombinerer data fra relaterte tabeller i spørringer ved å matche kolonnene knyttet til begrensningen. Indekser hjelper databasen med å finne tilknyttede data i en fremmed tabell.
    • Hvis du endrer primærnøkkelbegrensninger, blir de sjekket med de fremmede i relaterte tabeller.

    Det er ikke obligatorisk å lage indekser. Du kan fortsatt kombinere data fra to tabeller uten å spesifisere primær- og fremmednøkkelbegrensningene. Men å legge til fremmednøkkelbegrensninger optimerer tabellene og kombinerer dem i en spørring som oppfyller kriteriene for bruk av nøklene. Hvis du endrer primærnøkkelbegrensninger, blir de sjekket med de utenlandske i relaterte.

    Tips for å opprette utenlandske nøkkelbegrensninger i SQL

    Du har allerede brukt betydelig tid på spekulasjonene; svarte på hvorfor. La oss flytte fokuset vårt og begrense det til taktikken for å skape utenlandske nøkkelbegrensninger; svar på hvordan.

    Et `Foreign Key`-felt i en tabell refererer til `Primary Key` til en annen. Tabellen med primærnøkkelen er din overordnede tabell. Og tabellen med fremmednøkkelen kalles barnetabellen. La oss dykke inn.

    Opprette en fremmednøkkel mens du lager en tabell

    Når du oppretter en tabell, kan du også opprette en fremmednøkkelbegrensning for å opprettholde referanseintegritet. Slik gjør du det:

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

    Koden ovenfor oppretter en tabell kalt «ordrer» med den primære heltallsnøkkelen «ordre_id», et annet heltall «customer_id» og datoen «order_date». I dette tilfellet legges FOREIGN KEY-begrensningen til «customer_id»-kolonnen og refererer til «customer_id» i «customer»-tabellen.

    Opprette en fremmednøkkel etter å ha opprettet en tabell

    Anta at du allerede har opprettet en tabell og ønsker å legge til en fremmednøkkelbegrensning; bruk `ALTER TABLE`-setningen i koden din. Se på kodebiten nedenfor.

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

    I dette tilfellet har du lagt til en «customer_id»-kolonne for fremmednøkkel, i «orders»-tabellen for å referere til «customer_id»-kolonnen i «customers»-tabellen.

    Opprette en fremmednøkkel uten å se etter eksisterende data

    Når du legger til en fremmednøkkelbegrensning i en tabell, ser databasen automatisk etter eksisterende data for å sikre samsvar med begrensningen. Men hvis du vet at dataene er konsistente og vil legge til en begrensning uten konsistenssjekken, gjør du det her.

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

    NOT VALIDATE-kommandoen forteller databasen om ikke å se etter eksisterende data. Denne spesielle saken er nyttig i spesifikke tilfeller. For eksempel når du har massive data og ønsker å fullføre valideringsprosessen.

    Opprette en fremmednøkkel via DELETE/UPDATE

    Når du oppretter fremmednøkkelbegrensninger, kan du styre handlingen som skal utføres i tilfeller der den refererte raden oppdateres eller slettes. I dette tilfellet bruker du overlappende referanseintegritetsbegrensninger for å diktere handlingene som skal utføres. De inkluderer:

    #1. INGEN HANDLING

    Som med mange andre databaser, er «INGEN HANDLING»-regelen standardoppførselen når du oppretter en fremmednøkkelbegrensning. Dette betyr at ingen handling blir utført når den refererte raden slettes eller oppdateres.

      Slik kontrollerer du stavemåten din i Google Dokumenter

    Databasemotoren oppretter en feil hvis begrensningen for fremmednøkkelen brytes. Dette anbefales imidlertid ikke fordi det kan føre til problemer med referanseintegritet ettersom utenlandsknøkkelbegrensningen må håndheves. Her er et eksempel på hvordan du gjø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»-regelen er et annet alternativ for handlingene «ON DELETE» og «ON UPDATE» når du oppretter begrensninger for fremmednøkkel. Når den er satt på plass, betyr det at når en rad oppdateres eller slettes i de overordnede tabellene, oppdateres eller slettes de refererte radene tilsvarende. Denne teknikken er kraftig når du opprettholder referanseintegritet. 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 bruker denne regelen, siden den kan føre til uønskede konsekvenser hvis den ikke brukes forsiktig. Du vil unngå å slette for mye data ved et uhell eller lage sirkulære referanser. Bruk derfor kun dette alternativet hvis det er nødvendig og med forsiktighet.

    Det er noen regler for bruk av CASCADE:

    • Du kan ikke spesifisere CASCADE hvis en tidsstempelkolonne enten er en del av den fremmede eller refererte nøkkelen.
    • Hvis bordet ditt har en ISTEDEN FOR SLETT-utløser, kan du ikke spesifisere ON DELETED CASCADE.
    • Du kan ikke spesifisere ON UPDATE CASCADE hvis tabellen har ISTEDEN FOR OPPDATERING-utløser.

    #3. SET NULL

    Når du sletter eller oppdaterer en tilsvarende rad i den overordnede tabellen, settes alle verdiene som utgjør fremmednøkkelen til null. Denne begrensningsregelen krever at fremmednøkkelkolonner skal være nullbare å kjøre og kan ikke spesifiseres for tabeller som har INSTEAD OF UPDATE-utløsere. Her er et eksempel på hvordan du gjø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 tilfellet har du satt fremmednøkkelkolonnen «customer_id» i «ordre»-tabellen til å være null hvis den tilsvarende raden i «kunder»-tabellen slettes eller oppdateres.

    #4. SETT STANDARD

    Her setter du alle verdiene som gjør fremmednøkkelen til standard forutsatt at den refererte raden i den overordnede tabellen oppdateres eller slettes.

    Denne begrensningen kjøres hvis alle utenlandsknøkkelkolonner har standarddefinisjoner. Hvis en kolonne er nullbar, er standardverdien satt til NULL. Merk at dette alternativet ikke kan spesifiseres for tabeller med ISTED FOR OPPDATERING-utlø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 tilfellet ovenfor har du satt «customer_id» i «ordre»-tabellen til standardverdien, noe som skjer når den tilsvarende raden i «kunder»-tabellen slettes eller oppdateres.

    Siste ord

    I denne veiledningen har du fått en oppfriskning av primærnøkkelbegrensninger og gravd i fremmednøkkelbegrensninger. Du har også møtt flere teknikker for å lage begrensninger for fremmednøkkel. Og selv om det er mange måter å skape utenlandske nøkkelbegrensninger på, har dette innlegget avklart metodene.

    Og håper du har fått med deg nye teknikker; du er ikke begrenset til å kombinere dem. For eksempel kan CASCADE-, SET NULL-, SET DEFAULT- og NO ACTION-begrensningsmetodene kombineres på tabeller med referanserelasjoner.

    Hvis tabellen din møter INGEN HANDLING, går den tilbake til andre restriksjoner. I andre tilfeller kan en SLETT-handling utløse en kombinasjon av disse reglene, og NO ACTION-regelen kjøres som den siste.

    Deretter kan du sjekke ut SQL-juksearket.