SQL: ssä ulkomaisten avainten käsite on tärkeä, joka löytyy kaikista Alan ammattitietokannoista. Ydinajatuksena on estää PostgreSQL-tietokantaasi tallentamasta epäjohdonmukaisia tietoja asettamalla rajoituksia, jotka varmistavat taulukoidesi oikeellisuuden (ainakin objektien välisten suhteiden osalta). Referentiaalinen eheys onkin yksi tärkeimmistä siihen koskaan keksityistä käsitteistä.

ulkomaisissa avaimissa tulee kuitenkin esille asioita, jotka pitää hoitaa hakemuksia kirjoittaessa. Jos ulkomaisia avaimia ei ole, voit lisätä tietoja mihin tahansa taulukkoon missä tahansa järjestyksessä. PostgreSQL ei välitä. Kuitenkin, jos vieras avain on paikallaan, järjestys alkaa olla väliä (ainakin tyypillisessä skenaariossa, mutta enemmän siitä myöhemmin).

ulkomaiset avaimet ja tilaus

tilauksen merkityksen osoittamiseksi on ensin luotava tietomalli:

haluamme tallentaa valuutat, tuotteet sekä tuotekuvaukset. Pohjimmiltaan se on hyvin yksinkertainen tietomalli. Katsotaan, satummeko lisäämään tuotetaulukkoon:

loogisesti ensimmäinen lisäys epäonnistuu, koska valuuttaa numero 1 ei ole vielä olemassa. Jos haluamme lisätä, meidän on käytettävä NOLLAARVOA (= tuntematon valuutta). Järjestyksessä sanat: meidän täytyy täyttää valuuttataulukko ensin, sitten lisätä sijainnit, ja niin edelleen. Määräyksellä on merkitystä oletustapauksessa.

oikean asetusjärjestyksen määrittäminen ulkomaisille avaimille

jos on pakko alkaa käyttää olemassa olevaa tietomallia, voi olla hieman vaikeaa kietoa päätään tämän asian ympärille. Tyhjän tietomallin kansoittaminen voi olla hankalaa. Miksi emme siis kirjoittaisi kyselyä, jossa kerrotaan, missä järjestyksessä tietoja pitäisi lisätä?

No, tässä on se maaginen kysely…

kysely ei ole triviaalia luettavaa, mutta olen tehnyt parhaani dokumentoidakseni sitä vähän. Periaatteessa PostgreSQL – järjestelmätaulukoissa on kaikki tarvittava tieto oikean järjestyksen määrittämiseksi. Tässä on tuloste:

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

kuten näette, kysely on oikein antanut meille taulukot halutussa järjestyksessä. Ensinnäkin, meidän täytyy lisätä kaikkiin taulukoihin tasolla yksi ja niin edelleen. Jos pidämme kiinni tästä järjestyksestä, referentiaalinen eheys varmistetaan aina (olettaen, että tiedot ovat oikein).

käyttämällä ”alun perin lykättyjä” rajoitteita

joissakin tapauksissa lisäysjärjestys voi olla ikävä asia käsitellä. Entä jos meillä olisi keinot kertoa PostgreSQL: lle, että jättää tilauksen huomiotta ja tarkistaa sen sijaan eheys toimituksessa? Tämä on juuri sitä, mitä ”alun perin lykätty” tekee. Näin se toimii:

tässä tapauksessa voimme muokata dataa haluamassamme järjestyksessä. PostgreSQL on täysin kunnossa niin kauan kuin eheys on taattu kaupan päättyessä. PostgreSQL lykkää rajoitustarkistusta ja ottaa jonkin verran taakkaa kehittäjältä.

Finally …

jos haluat oppia lisää kehittyneestä SQL: stä, sinun kannattaa vilkaista blogiani edistyneemmistä windowing-funktioista (solmioineen). Pue siis solmio päällesi ja lue saadaksesi lisätietoja.

Vastaa

Sähköpostiosoitettasi ei julkaista.