az SQL-ben az idegen kulcsok fogalma fontos, amely megtalálható az iparágban használt összes professzionális adatbázisban. Az alapötlet az, hogy megakadályozzuk a PostgreSQL adatbázis inkonzisztens adatok tárolását a táblák helyességét biztosító korlátozások érvényesítésével (legalábbis az objektumok közötti kapcsolatok tekintetében). A referenciális integritás tehát az egyik legfontosabb fogalom, amelyet valaha feltaláltak benne.

az idegen kulcsok azonban bevezetnek néhány kérdést, amelyekre ügyelnie kell az alkalmazások írásakor. Ha nincsenek idegen kulcsok, bármilyen sorrendben bármilyen táblázatba beillesztheti az adatokat. A PostgreSQL nem érdekli. Ha azonban idegen kulcs van a helyén,akkor a sorrend számít (legalábbis egy tipikus forgatókönyv szerint, de erről később).

idegen kulcsok és rendelés

a megrendelés fontosságának bemutatásához először létre kell hoznunk egy adatmodellt:

valutákat, termékeket, valamint termékleírásokat akarunk tárolni. Alapvetően ez egy nagyon egyszerű adatmodell. Nézzük meg, hogy beillesztjük-e a terméktáblába:

logikusan az első betét sikertelen lesz, mert az 1.pénznem még nem létezik. Ha beszúrni akarunk, akkor NULL értéket kell használnunk (= ismeretlen pénznem). A szavak sorrendjében: először ki kell töltenünk a valuta táblázatot, majd be kell helyeznünk a helyeket stb. A sorrend nem számít az alapértelmezett esetben.

az idegen kulcsok helyes beillesztési sorrendjének meghatározása

ha el kell kezdenie egy meglévő adatmodell használatát, kissé nehéz lehet ezt a dolgot körülölelni. Egy üres adatmodell feltöltése kissé trükkös lehet. Akkor miért nem ír egy lekérdezést, amely megmondja nekünk az adatok beszúrásának sorrendjét?

Nos, itt van ez a mágikus lekérdezés…

a lekérdezés nem triviális olvasni, de mindent megtettem, hogy egy kicsit dokumentáljam. Alapvetően a PostgreSQL rendszertáblák tartalmazzák az összes információt, amelyre szükségünk van a helyes sorrend meghatározásához. Itt van a kimenet:

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

mint látható, a lekérdezés helyesen adta meg a táblákat a kívánt sorrendben. Először be kell illesztenünk az összes táblázatba az első szinten és így tovább. Ha ragaszkodunk ehhez a sorrendhez, a referenciális integritás mindig biztosított lesz (feltételezve, hogy az adatok helyesek).

az “eredetileg halasztott” korlátozások használata

bizonyos esetekben a beillesztési sorrend csúnya dolog lehet. Mi lenne, ha meg tudnánk mondani a PostgreSQL-nek, hogy hagyja figyelmen kívül a megrendelést, és ellenőrizze az integritást a commit-on? Pontosan ezt teszi az” eredetileg halasztott”. Így működik:

ebben az esetben az adatokat bármilyen sorrendben módosíthatjuk. Mindaddig, amíg az integritás garantáltan sértetlen marad a tranzakció végén, a PostgreSQL teljesen rendben van. PostgreSQL elhalasztja a kényszer ellenőrzés, és némi terhet le a fejlesztő.

végül …

Ha többet szeretne megtudni a fejlett SQL-ről, érdemes megnéznie a blogomat néhány fejlettebb ablakfunkcióról (nyakkendőkkel). Tehát vegye fel a nyakkendőjét, és olvassa el, hogy többet tudjon meg.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.