I SQL er begrepet utenlandske nøkler en viktig som finnes i alle profesjonelle databaser som brukes i bransjen. Kjerneideen er å forhindre At PostgreSQL-databasen lagrer inkonsekvente data ved å håndheve begrensninger som sikrer at tabellene dine er riktige (minst så langt som forhold mellom objekter er bekymret). Referanseintegritet er derfor et av de viktigste konseptene som noensinne er oppfunnet i DEN.

imidlertid vil utenlandske nøkler introdusere noen problemer som du må ta vare på når du skriver applikasjoner. Hvis det ikke finnes utenlandske nøkler, kan du sette inn data i et bord i hvilken som helst rekkefølge. PostgreSQL bryr seg ikke. Men hvis en sekundærnøkkel er på plass, begynner ordren å bety noe(i hvert fall i et typisk scenario, men mer om det senere).

Utenlandske nøkler og ordre

for å vise betydningen av ordre må vi først lage en datamodell:

vi vil lagre valutaer, produkter, samt produktbeskrivelser. I utgangspunktet er det en veldig enkel datamodell. La oss se om vi kommer til å sette inn i produkttabellen:

Logisk vil den Første INNSATSEN mislykkes fordi valuta nummer 1 ikke eksisterer ennå. Hvis vi VIL SETTE inn, må vi bruke EN NULLVERDI (=ukjent valuta). I ordreord: vi må fylle valutatabellen først, deretter sette inn steder, og så videre. Ordren gjør saken i standard tilfelle.

Bestemme riktig innsettingsrekkefølge for fremmednøkler

hvis du må begynne å bruke en eksisterende datamodell, kan det være litt vanskelig å vikle hodet rundt dette. Fylle en tom datamodell kan være litt vanskelig. Så hvorfor ikke skrive en spørring som forteller oss hvilken rekkefølge vi skal sette inn data?

vel,her er den magiske spørringen…

spørringen er ikke trivial å lese, men jeg har gjort mitt beste for å dokumentere det litt. I utgangspunktet Har PostgreSQL – systemtabellene all den informasjonen vi trenger for å bestemme riktig rekkefølge. Her er utgangen:

 table_name | level-----------------+------- t_currency | 1 t_location | 1 t_product | 2 t_product_desc | 3 t_product_stock | 3(5 rows)

som du kan se, har spørringen riktig gitt oss tabellene i ønsket rekkefølge. Først må vi sette inn i alle tabeller på nivå ett og så videre. Hvis vi holder oss til denne ordren, vil referanseintegritet alltid sikres (forutsatt at dataene er korrekte).

Å gjøre bruk av» opprinnelig utsatt » begrensninger

i noen tilfeller kan innsettingsordren være en ekkel ting å håndtere. Hva om Vi hadde midler til å fortelle PostgreSQL å ignorere ordren og sjekke integriteten på commit i stedet? Dette er akkurat hva «opprinnelig utsatt» gjør. Slik fungerer det:

I dette tilfellet kan vi endre data i den rekkefølgen vi ønsker. Så lenge integritet er garantert å være intakt på slutten av transaksjonen, Er PostgreSQL helt greit. PostgreSQL vil utsette begrensningen sjekk og ta noen byrde av utbygger.

Endelig …

hvis du vil lære mer om advanced SQL, vil du kanskje se på bloggen min om noen mer avanserte vindusfunksjoner (med bånd). Så ta på slipset og les for å lære mer.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.