Névjegyek

Az integritási korlátozások meghatározása. Elsődleges kulcsok létrehozása Elsődleges kulcs az SQL táblában

Az adattípusok maguk korlátozzák a táblázatban tárolható adatok mennyiségét. Sok alkalmazás esetében azonban ezek a korlátok túl szigorúak. Például egy termék árát tartalmazó oszlop valószínűleg csak pozitív értékeket vegyen fel. De nincs ilyen szabványos adattípus. Érdemes korlátozni az oszlopadatokat más oszlopokhoz vagy sorokhoz képest. Például egy táblázatban, amely egy termékre vonatkozó információkat tartalmaz, csak egy sornak kell lennie egy adott termékkóddal.

Ehhez az SQL lehetővé teszi az oszlopokra és táblázatokra vonatkozó korlátozások meghatározását. A korlátozások lehetővé teszik, hogy a kívánt módon kezelje a táblázatokban szereplő adatokat. Ha a felhasználó olyan értéket próbál tárolni az oszlopban, amely megsérti a korlátozásokat, hiba lép fel. A korlátozások akkor is érvényesek, ha ez az alapértelmezett.

5.3.1. Ellenőrizze a korlátozásokat

A korlátozás ellenőrzése a leggyakoribb típusú korlátozás. A definíciójában megadhatja, hogy egy adott oszlop értékének meg kell felelnie egy logikai kifejezésnek (igazság teszt). Például egy termék ára korlátozható az alábbi pozitív értékekre:

Név szöveg, ár numerikus ELLENŐRZÉS (ár> 0) );

Amint láthatja, a korlátozás az adattípus után kerül meghatározásra, csakúgy, mint az alapértelmezett. Az alapértelmezett értékek és korlátok tetszőleges sorrendben adhatók meg. Az ellenőrzési kényszer a CHECK kulcsszóból és egy zárójeles kifejezésből áll. Ennek a kifejezésnek tartalmaznia kell a korlátozandó oszlopot, különben nincs sok értelme.

A korlátozásnak külön nevet is adhat. Ez javítja a hibaüzeneteket, és lehetővé teszi, hogy hivatkozzon erre a korlátozásra, amikor módosítania kell. Ezt így teheti:

CONSTRAINT pozitív_ár ELLENŐRZÉS (ár> 0));

Vagyis egy elnevezett kényszer létrehozásához írja be a CONSTRAINT kulcsszót, majd egy azonosítót és a tényleges korlátozásdefiníciót. (Ha nem definiál ilyen módon egy korlátozó nevet, akkor a rendszer nevet választ Önnek.)

Egy érvényesítési korlátozás több oszlopra is hivatkozhat. Például, ha tárolja a rendes árat és a kedvezményes árat, akkor biztosíthatja, hogy a kedvezményes ár mindig alacsonyabb legyen a rendes árnál:

TÁBLÁZATI LÉTREHOZÁS (product_no egész szám, név szöveg, ár numerikus CHECK (ár> 0), kedvezményes_ár numerikus CHECK (diszkontált_ár> 0), ELLENŐRZÉS (ár> kedvezményes ár) );

Az első két kényszert hasonló módon határozzák meg, de a harmadik új szintaxist használ. Nincs egy adott oszlophoz társítva, de külön elemként szerepel a listában. Az oszlopdefiníciók és az ilyen korlátozási definíciók bármilyen sorrendben átrendezhetők.

Az első két megkötés oszlopkorlátozásnak mondható, míg a harmadik egy táblázatkorlátozás, mivel az oszlopdefinícióktól külön van írva. Az oszlopkorlátozások táblázatkorlátozásként is írhatók, míg a fordított nem mindig lehetséges, mivel az oszlopkorlátozás csak egy kapcsolódó oszlopra hivatkozik. (Bár a PostgreSQL ezt nem igényli, a legjobb, ha ezt a szabályt követi a többi DBMS -sel való kompatibilitás érdekében.) A fenti példa a következőképpen írható át:

TÁBLÁZATI LÉTREHOZÁS (termék_nem egész szám, név szöveg, ár numerikus, ELLENŐRZÉS (ár> 0), kedvezményes ár numerikus, ELLENŐRZÉS (kedvezményes ár> 0), ELLENŐRZÉS (ár> kedvezményes ár));

Vagy akár így:

TÁBLÁZATI LÉTREHOZÁS (termék_nem egész szám, név szöveg, ár numerikus ELLENŐRZÉS (ár> 0), kedvezményes ár numerikus, ELLENŐRZÉS (kedvezményes ár> 0 ÉS ár> kedvezményes ár));

Ez ízlés dolga.

A táblázat megszorításait ugyanúgy nevezheti el, mint az oszlopkorlátozásokat:

TÁBLÁZATI LÉTREHOZÁS (termék_szám nem egész, név szöveg, ár számszerű, ELLENŐRZÉS (ár> 0), kedvezményes_áras szám, ELLENŐRZÉS (kedvezményes ár> 0), CONSTRAINT érvényes_kedvezmény CHECK (ár> kedvezményes ár));

Vegye figyelembe, hogy a tesztkorlátozás teljesül, ha a kifejezés értéke true vagy NULL. Mivel sok NULL -operandusú kifejezés NULL -t eredményez, az ilyen korlátozások nem akadályozzák meg a NULL -ek írását a kapcsolódó oszlopokba. Annak biztosítása érdekében, hogy egy oszlop ne tartalmazzon NULL értékeket, használhatja a következő részben leírt NOT NULL korlátozást.

5.3.2. NULL korlátozások

A NOT NULL korlátozás egyszerűen azt jelzi, hogy az oszlophoz nem rendelhető NULL érték. Példa a szintaxisra:

TÁBLÁZATI LÉTREHOZÁS (product_no egész szám NEM NULLA, név szöveg NEM NULLA, ár numerikus);

A NOT NULL korlátozás mindig oszlopkorlátozásként van írva, és funkcionálisan egyenértékű egy CHECK ( oszlop_neve IS NOT NULL), de a kifejezett NOT NULL korlátozás hatékonyabban működik a PostgreSQL -ben. Bár egy ilyen rekordnak van hátránya - nem rendelhet nevet az ilyen korlátozásokhoz.

Természetesen egy korláthoz több korlátozást is megadhat. Ehhez csak egyenként kell megadnia őket:

TÁBLÁZATI LÉTREHOZÁS (product_no egész szám NOT NULL, a név szövege NOT NULL, ár numerikus NOT NULL CHECK (ár> 0));

A sorrend itt nem számít, nem feltétlenül felel meg a megszorítások ellenőrzésének sorrendjének.

A NOT NULL megkötés ellenkezője is létezik: a NULL megkötés. Ez nem jelenti azt, hogy az oszlop csak NULL legyen, ami természetesen értelmetlen lenne. Lényege abban áll, hogy az oszlop NULL lehet (ez az alapértelmezett viselkedés). Az SQL szabványban nincs NULL korlátozás, és nem szabad hordozható alkalmazásokban használni. (A Postgres Pro -ba csak más DBMS -ekkel való kompatibilitás miatt került fel.) Néhány felhasználó azonban szívesen használja, mert lehetővé teszi a korlátozások egyszerű váltását egy szkriptben. Kezdheti például:

TÁBLÁZATI LÉTREHOZÁS (product_no egész szám NULL, név szöveg NULL, ár numerikus NULL);

majd illessze be a NOT kulcsszót, ahol szükséges.

nyom

Az adatbázis -tervezés során legtöbbször a legtöbb oszlopot NOT NULL jelöléssel kell ellátni.

5.3.3. Az egyediség korlátai

Az egyedi megszorítások biztosítják, hogy egy adott oszlop vagy oszlopcsoport adatai egyediek legyenek a táblázat minden sorában. A korlátozás így van írva:

TÁBLÁZATI LÉTREHOZÁS (product_no egész szám EGYEDI

oszlopkorlátozásként és így:

TÁBLÁZATI LÉTREHOZÁS (product_no egész szám, név szöveg, ár számszerű, EGYEDI (termékszám) );

mint asztali korlát.

Ha egyedi korlátot szeretne meghatározni egy oszlopcsoport számára, írja be azt táblakorlátozásként, elválasztva az oszlopneveket, vesszővel elválasztva:

EGYEDI (a, c) );

Ez a korlátozás azt jelzi, hogy a felsorolt ​​oszlopok értékeinek kombinációjának egyedinek kell lennie a teljes táblázatban, míg az egyes oszlopok értékei nem lehetnek egyediek (és általában nem is lesznek).

Az egyedi korlátozást a szokásos módon nevezheti el:

TÁBLÁZATI LÉTREHOZÁS (product_no egész szám CONSTRAINT must_be_different EGYEDI, név szöveg, szám numerikus);

Egy egyedi kényszer hozzáadása automatikusan létrehoz egy egyedi B-fa indexet a korlátozásban felsorolt ​​oszlophoz vagy oszlopcsoporthoz. Egyedülálló feltétel, amely csak néhány sorra vonatkozik, nem írható egyedi megkötésként, de egyedi részleges index létrehozásával beállítható.

Általánosságban elmondható, hogy az egyediség korlátozása megsértődik, ha a táblázat több sort tartalmaz, amelyek azonos értékekkel rendelkeznek a korlátozásban szereplő összes oszlophoz. Két NULL érték azonban soha nem tekinthető egyenlőnek, ha összehasonlítjuk őket. Ez azt jelenti, hogy még ha egyedi korlátozás is van a táblázatban, megtarthatja a sorokat ismétlődő értékekkel, ha NULL -t tartalmaznak egy vagy több korlátozó oszlopban. Ez a viselkedés követi az SQL szabványt, de hallottunk már másképp viselkedő DBMS -ekről. Ezt tartsa szem előtt hordozható alkalmazások fejlesztésekor.

5.3.4. Elsődleges kulcsok

Az elsődleges kulcskorlátozás azt jelenti, hogy az alkotó oszlop vagy oszlopcsoport egyedi azonosító lehet a táblázat soraihoz. Ehhez az értékeknek egyszerre kell egyedieknek és nem NULL értékeknek lenniük. Így az alábbi két definíciót tartalmazó táblázatok ugyanazokat az adatokat fogadják el:

TÁBLÁZATI LÉTREHOZÁS (product_no egész szám UNIQUE NOT NULL, név szöveg, ár numerikus); TÁBLÁZATI LÉTREHOZÁS (product_no egész szám ELSŐDLEGES KULCS, név szöveg, ár numerikus);

Az elsődleges kulcsok több oszlopot is tartalmazhatnak; a szintaxis hasonló az egyediségi korlátozások írásához:

TÁBLÁZAT LÉTREHOZÁSA példa (egész szám, b egész szám, c egész szám, ELSŐGOMB (a, c) );

Elsődleges kulcs hozzáadásakor automatikusan létrejön egy egyedi B-fa index az elsődleges kulcsban felsorolt ​​oszlophoz vagy oszlopcsoporthoz, és ezek az oszlopok NOT NULL jelzést kapnak.

Egy táblázatban legfeljebb egy elsődleges kulcs lehet. (Bármennyi egyediségi korlátozás és NULL korlátozás lehet, amelyek funkcionálisan majdnem egyenértékűek az elsődleges kulcsokkal, de elsődleges kulcskorlátozásként csak egyet rendelhet hozzá.) A relációs adatbázis elmélete szerint minden táblának rendelkeznie kell elsődleges kulccsal. A PostgreSQL nem rendelkezik ilyen szigorú követelményekkel, de általában a legjobb, ha betartják.

Az elsődleges kulcsok mind a dokumentációban, mind az ügyfélalkalmazásokban hasznosak. Például egy grafikus alkalmazásnak, amely képes a táblázat tartalmának szerkesztésére, valószínűleg ismernie kell a tábla elsődleges kulcsát, hogy egyedileg azonosíthassa sorait. Az elsődleges kulcsok más felhasználásokat is találnak a DBMS -ekben; különösen a táblázat elsődleges kulcsa határozza meg az erre a táblára hivatkozó idegen kulcsok alapértelmezett céloszlopait.

5.3.5. Idegen kulcsok

Egy idegen kulcsra vonatkozó megszorítás azt határozza meg, hogy egy oszlop (vagy oszlopcsoport) értékeinek meg kell egyezniük egy másik táblázat egyes sorainak értékeivel. Ez az úgynevezett referenciális integritás két kapcsolódó táblázat.

Tegyük fel, hogy már van egy táblázata azokról a termékekről, amelyeket már sokszor használtunk:

TÁBLÁZATI LÉTREHOZÁS (termék_nem egész szám ELSŐGYOMB KULCS, név szöveg, ár numerikus);

Tegyük fel, hogy van egy táblázata ezeknek a termékeknek a megrendeléseivel. Csak azt akarjuk, hogy a rendelési táblázat csak a ténylegesen meglévő termékek rendeléseit tartalmazza. Ezért definiálunk benne egy idegen kulcsra vonatkozó korlátozást, amely a terméktáblára vonatkozik:

REFERENCES termékek (product_no) , mennyiség egész);

Ezzel a korlátozással lehetetlen lesz olyan product_no értékű rendelést létrehozni, amely nem szerepel a termékek táblában (és nem egyenlő a NULL értékkel).

Egy ilyen sémában a megrendelések táblázatot hívják alárendelt asztal és termékek - a fő... Ennek megfelelően az oszlopokat alárendeltnek és mesternek (vagy hivatkozásnak és célnak) is nevezik.

Az előző parancs lerövidíthető a következőképpen:

TÁBLÁZAT LÉTREHOZÁSA (rendelésazonosító egész szám Elsődleges kulcs, termék_szám nem egész REFERENCES termékek, mennyiség egész);

vagyis ha kihagyja az oszlopok listáját, az idegen kulcs implicit módon a főtábla elsődleges kulcsához kapcsolódik.

Egy idegen kulcs hivatkozhat egy oszlopcsoportra is. Ebben az esetben rendszeres táblázatkorlátozásként kell írni. Például:

T1 TÁBLÁZAT LÉTREHOZÁSA KÜLFÖLDI KULCS (b, c) REFERENCIÁK other_table (c1, c2) );

Természetesen a korlátozásban szereplő oszlopok számának és típusának meg kell egyeznie a céloszlopok számával és típusával.

Az idegen kulcs megszorítását szabványos módon nevezheti el.

Egy táblázat több idegen kulcs korlátozást is tartalmazhat. Ez a táblázatok közötti sok-sok kapcsolat esetén hasznos. Tegyük fel, hogy vannak terméktáblázatok és rendelések, de azt szeretné, ha egy rendelés több terméket is tartalmazhatna (ami az előző sémában nem lehetséges). Ehhez a következő sémát használhatja:

TÁBLÁZATI LÉTREHOZÁS (termék_nem egész szám ELSŐGYOMB KULCS, név szöveg, ár numerikus); TÁBLÁZAT LÉTREHOZÁSA (rendelésazonosító egész szám elsődleges kulcs, szállítási_cím szöveg, ...); TÁBLÁZAT LÉTREHOZÁSA order_items (product_no egész szám REFERENCES termékek, order_id egész szám REFERENCES megrendelések, mennyiség egész szám, PRIMARY GOMB (product_no, order_id));

Vegye figyelembe, hogy az utolsó táblázatban az elsődleges kulcs az idegen kulcsokat takarja.

Tudjuk, hogy az idegen kulcsok megakadályozzák olyan megrendelések létrehozását, amelyek nem kapcsolódnak semmilyen termékhez. De mi van akkor, ha egy adott termékkel kapcsolatos rendelések létrehozása után törölni akarjuk? Az SQL megoldja ezt a helyzetet. Az intuíció a következő viselkedésformákat javasolja:

    A termék eltávolításának megakadályozása

    Törölje a kapcsolódó rendeléseket is

    Valami más?

Szemléltetésképpen valósítsuk meg a fenti példában a következő viselkedést: amikor megrendelésekkel hivatkozott terméket próbálunk törölni (a order_items táblán keresztül), akkor letiltjuk ezt a műveletet. Ha valaki megpróbálja törölni a rendelést, akkor annak tartalma is törlődik:

TÁBLÁZATI LÉTREHOZÁS (termék_nem egész szám ELSŐGYOMB KULCS, név szöveg, ár numerikus); TÁBLÁZAT LÉTREHOZÁSA (rendelésazonosító egész szám elsődleges kulcs, szállítási_cím szöveg, ...); TÁBLÁZAT LÉTREHOZÁSA order_items (product_no egész szám REFERENCES termékek KORLÁTOZÁS TÖRLÉSÉN, order_id integer REFERENCES rendelések A CASCADE TÖRLÉSÉN, mennyiség egész szám, ELSŐGOMB (kulcs_szám, rendelési_azonosító));

A korlátozás és a lépcsőzetes törlés a két leggyakoribb lehetőség. A RESTRICT megakadályozza a kapcsolódó sor törlését. A NINCS MŰVELET azt jelenti, hogy ha a függő sorok továbbra is léteznek a korlátozás ellenőrzése közben, akkor hiba lép fel (ez az alapértelmezett viselkedés). (A fő különbség e két lehetőség között az, hogy a NO ACTION lehetővé teszi az ellenőrzés elhalasztását egy tranzakció során, míg a RESTRICT nem.) A CASCADE megadja, hogy a kapcsolódó sorok törlése automatikusan törli a függő sorokat is. További két lehetőség van: SET NULL és SET DEFAULT. A kapcsolódó sorok törlésekor NULL vagy alapértelmezett értékeket rendelnek az alárendelt táblázat függő oszlopaihoz. Vegye figyelembe, hogy ez nem lesz oka a korlátozás megsértésének. Például, ha SET DEFAULT van megadva műveletként, de az alapértelmezett nem felel meg az idegen kulcs megkötésének, a művelet sikertelen lesz.

Az ON DELETE utasításhoz hasonlóan van egy ON UPDATE, amely akkor lép életbe, amikor a megadott oszlop megváltozik. Ebben az esetben a lehetséges műveletek azonosak, de a CASCADE ebben az esetben azt jelenti, hogy a kapcsolódó oszlopok megváltozott értékei a függő sorokba kerülnek.

Általában a függő sornak nem kell kielégítenie az idegen kulcs megkötését, ha az egyik kapcsolódó oszlop NULL. Ha a MATCH FULL hozzáadódik az idegen kulcs deklarációjához, a karakterlánc csak akkor felel meg a megkötésnek, ha az összes kapcsolódó oszlop NULL (azaz különböző értékek (NULL és nem NULL) esetén a MATCH FULL korlátozás garantáltan sikertelen lesz) . Ha nem szeretné, hogy a függő sorok elkerüljék ezt a korlátozást, deklarálja, hogy a kapcsolódó oszlopok NULL értékűek.

Az idegen kulcsnak hivatkoznia kell az elsődleges kulcsot vagy egyedi korlátozást alkotó oszlopokra. Így mindig lesz egy index (amelyet a megfelelő elsődleges kulcs vagy korlátozás határoz meg) a kapcsolt oszlopokhoz, ami azt jelenti, hogy a linkelt sor megfelelő egyezései hatékonyan lesznek végrehajtva. Mivel a törlőtáblák sorainak DELETE parancsai vagy a függő oszlopok UPDATE parancsai megkövetelik az alárendelt tábla beolvasását és a régi értékekre hivatkozó sorok megkeresését, hasznos, ha az alárendelt oszlopokra is van index. De ez nem mindig szükséges, és a megfelelő index létrehozásának különböző módjai vannak, így az idegen kulcsú deklaráció nem hoz létre automatikusan indexet a kapcsolódó oszlopokban.

Utolsó frissítés: 2019.04.27

Az idegen kulcsok lehetővé teszik a táblák közötti kapcsolatok létrehozását. Az idegen kulcs a függő, alárendelt táblázat oszlopaihoz van beállítva, és a főtábla egyik oszlopára mutat. Általában egy idegen kulcs egy kapcsolódó mester táblából származó elsődleges kulcsra mutat.

Az idegen kulcsok táblázatszinten történő beállításának általános szintaxisa a következő:

KÜLFÖLDI KULCS (1. oszlop, 2. oszlop, ... oszlop N.) REFERENCES master_table (oszlop_fő_táblázat1, oszlop_főtábla2, ... oszlop_fő_táblázatN)

Idegen kulcsra vonatkozó kényszer létrehozásához a FOREIGN KEY után adja meg azt a táblázat oszlopot, amely az idegen kulcsot reprezentálja. A REFERENCES kulcsszó után a kapcsolódó táblázat neve, majd a kapcsolódó oszlop neve zárójelben, amelyre az idegen kulcs mutat. A REFERENCES kifejezést az ON DELETE és ON UPDATE utasítások követik, amelyek meghatározzák a sor törlésekor és a főtáblából történő frissítésekor végrehajtandó műveleteket.

Például határozzunk meg két táblát, és kapcsoljuk össze őket idegen kulccsal:

TÁBLÁZAT LÉTREHOZÁSA Ügyfelek (Id INT PRIMARY KEY AUTO_INCREMENT, Age INT, FirstName VARCHAR (20) NOT NULL, LastName VARCHAR (20) NOT NULL, Phone VARCHAR (20) NOT NULL UNIQUE); TÁBLÁZAT LÉTREHOZÁSA (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERENCES Customer (Id));

Ebben az esetben a Vevők és Megrendelések táblák vannak definiálva. Az ügyfelek felelősek és képviselik az ügyfelet. A megrendelések függőek, és az ügyfél által leadott rendelést jelentik. A Rendelések tábla a CustomerId oszlopon keresztül kapcsolódik az Ügyfelek táblához és annak Id oszlopához. Vagyis a CustomerId oszlop egy idegen kulcs, amely az Ügyfelek táblázat Id oszlopára mutat.

A CONSTRAINT utasítás használatával megadhatja az idegen kulcs megszorításának nevét:

TÁBLÁZAT LÉTREHOZÁSA (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, CONSTRAINT order_custonmers_fk FOREIGN KEY (CustomerId) REFERENCES Ügyfelek (Id));

TÖRLÉSBEN és FRISSÍTÉSEN

Az ON DELETE és ON UPDATE utasításokkal beállíthatók azok a műveletek, amelyeket akkor kell végrehajtani, amikor a kapcsolódó sort törlik és módosítják a főtáblából. A következő lehetőségek használhatók műveletként:

    CASCADE: Automatikusan törli vagy módosítja a sorokat egy függő táblából, amikor törli vagy módosítja a főtábla kapcsolódó sorait.

    SET NULL: Az idegen kulcs oszlopot NULL értékre állítja, amikor törli vagy frissíti a kapcsolódó sort a főtáblából. (Ebben az esetben az idegen kulcs oszlopnak támogatnia kell a NULL beállítást)

    KORLÁTOZOTT: Elutasítja a törlést vagy módosítást a fő táblában, ha vannak kapcsolódó sorok a függő táblában.

    NINCS AKCIÓ: ugyanaz, mint a RESTRICT.

    BEÁLLÍTÁS: Ha törli a kapcsolódó sort a főtáblából, állítsa az idegen kulcs oszlopot az alapértelmezett értékre, amelyet a DEFAULT attribútumok segítségével állít be. Bár ez az opció elvileg elérhető, az InnoDB motor nem támogatja ezt a kifejezést.

Kaszkád törlés

A lépcsőzetes törlés lehetővé teszi, hogy automatikusan törölje az összes kapcsolódó sort a függő táblából, amikor töröl egy sort a fő táblából. Ehhez a CASCADE opciót használják:

TÁBLÁZAT LÉTREHOZÁSA (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERENCES Ügyfelek (azonosító) CASCADE DELETE);

Az ON UPDATE CASCADE utasítás hasonló módon működik. Az elsődleges kulcs értékének módosítása automatikusan megváltoztatja a hozzá tartozó idegen kulcs értékét. Mivel azonban az elsődleges kulcsokat nagyon ritkán cserélik, és elvileg nem ajánlott megváltoztatható értékű oszlopokat használni elsődleges kulcsként, a gyakorlatban az ON UPDATE utasítást ritkán használják.

NULL beállítás

Amikor a SET NULL opciót egy idegen kulcshoz állítja be, az idegen kulcs oszlopnak nullázhatónak kell lennie:

TÁBLÁZAT LÉTREHOZÁSA (Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERENCES Ügyfelek (Id) ON DELETE SET NULL);

) elemeztük a relációs (táblázatos) adatbázis működését, és megállapítottuk, hogy a relációs adatbázis fő elemei: táblázatok, oszlopok és sorok, matematikai értelemben pedig relációk, attribútumok és sorok. Gyakran a sorokat rekordoknak, az oszlopokat oszlopoknak, a rekord és az oszlop metszéspontját pedig cellának nevezik.

Fontos megjegyezni, hogy a sorok tartalmának és az oszlopneveknek egyedinek kell lenniük ugyanabban az adatbázisban.

Adatbázis adattípusok

Fontos megérteni, hogy bármilyen típusú adathoz adatbázisokat hozhat létre: szövegek, dátumok, időpontok, események, számok. A relációs adatbázisokat az információ típusától függően típusokra osztják. Minden adattípusnak (attribútumnak) saját megnevezése van:

  • INTEGER- adatok egész számokból;
  • FLOAT - törtszámokból származó adatok, ún. Lebegőpontos adatok;
  • CHAR, VARCHAR - szöveges adattípusok (karakter);
  • LOGIKAI - logikai adattípus (igen / nem);
  • DATE / TIME - ideiglenes adatok.

Ezek a fő adattípusok, amelyekből valójában sokkal több van. Ezenkívül minden programozási nyelv saját rendszerattribútumokkal (adattípusokkal) rendelkezik.

Mi a relációs adatbázis táblák elsődleges és idegen kulcsa?

Elsődleges kulcs

Fentebb emlékeztünk: az adatbázis minden sorának (rekordjának) egyedinek kell lennie. Ez az elsődleges kulcs meghatározott értékkészletek formájában, amelyek maximálisan azonosítják az egyes rekordokat. Másképp is meghatározhatja. Elsődleges kulcs: Az egyes rekordok egyedi jellemzőinek halmaza. Az elsődleges kulcs az elsődleges kulcs.

Elsődleges kulcs (PK) nagyon fontos minden asztalnál. Hadd magyarázzam meg, miért.

  • Az elsődleges kulcs nem teszi lehetővé azonos rekordok (sorok) létrehozását a táblázatban;
  • A PK logikai kapcsolatot biztosít ugyanazon adatbázis táblái között (relációs adatbázisok esetén).

Érdemes a táblázatok közötti logikai kapcsolaton foglalkozni.

Külső kulcs

Idegen kulcs, rövid FK. Egyértelmű logikai kapcsolatot biztosít ugyanazon adatbázis táblái között.

Például két táblázat van az A és a B. Az A táblázatban (cipő) van egy elsődleges kulcs: méret, a B táblázatban (szín) egy oszlopnak kell lennie a név méretével. Ebben a táblázatban a "méret" lesz a B és A táblázatok közötti logikai kapcsolat idegen kulcsa.

Bonyolultabb példa.

Két adattábla: Emberek és Telefonszámok.

Táblázat: Emberek

Táblázat: Telefonszámok

A PK egyedülálló a Telefonszámok táblázatban. Ennek a táblázatnak az FK -ja a People tábla PK -ja. A telefonszámok és az emberek közötti kapcsolatot az FK telefon táblái biztosítják. Azaz:

  • Zaitsevnek két telefonja van;
  • Volkovnak két telefonja van;
  • Belkinnek van egy telefonja.
elsődleges és idegen kulcs

Végezetül hozzáteszem, hogy bármilyen az adatbázis -kezelő rendelkezik technikai képességgel az elsődleges kulcs összeállításához.

ELSŐDLEGES KULCS- elsődleges kulcs, egy korlátozás, amely lehetővé teszi a táblázat minden rekordjának egyedi azonosítását SQL.

PRIMARY KEY Oracle
Elsődleges kulcs ( ELSŐDLEGES KULCS) korlátozhatja a táblákat vagy azok oszlopait. Ez a korlátozás ugyanúgy működik, mint az UNIQUE korlátozás. Azonban figyelembe kell vennie a különbséget az elsődleges kulcsok és az oszlop egyedisége között abban, ahogyan azokat idegen kulcsokkal használja. Az elsődleges kulcsok nem engedélyezhetik a NULL értékeket. Ez azt jelenti, hogy az UNIQUE korlátozás mezőihez hasonlóan a korlátozásban használt bármely mező ELSŐDLEGES KULCS, bizonyára már NULL -nak nyilvánították.

PRIMARY KEY Oracle... 1. példa.
Példa egy táblázat létrehozására SQL korlátozással ELSŐDLEGES KULCS:

Diák
(A Kod_stud egész szám NULL ELSŐDLEGES KULCS,
Fam char (30) NOT NULL UNIQUE,
Adres char (50),
Golyó tizedes);

A legjobb, ha megszorítást teszel ELSŐDLEGES KULCS a mezőben (vagy mezőkben), amelyek egyedi karakterlánc -azonosítót alkotnak, és megtartják az UNIQUE korlátozást azokra a mezőkre, amelyeknek logikailag egyedieknek kell lenniük (például telefonszámok vagy névmezők), nem pedig karakterláncokat. Korlátozás ELSŐDLEGES KULCS több mezőre is alkalmazható, amelyek egyedi értékkombinációt alkotnak:

PRIMARY KEY Oracle... 2. példa.

TÁBLÁZAT LÉTREHOZÁSA Diák
(Fam char (30) NOT NULL,
Im char (30) NOT NULL
Cím: char (50),
ELSŐDLEGES KULCS(Fam, Im));

PRIMARY KEY MySQL

Elsődleges kulcs SQL / MySQL... 3. példa.

TÁBLÁZAT LÉTREHOZÁSA Személyek (
P_Id int NULL,
Vezetéknév varchar (255) NOT NULL,
Keresztnév varchar (255),
Cím varchar (255),
Városi varchar (255),
ELSŐDLEGES KULCS(P_Id));

Elsődleges kulcs / SQL / MySQL... 4. példa.

TÁBLÁZAT LÉTREHOZÁSA`ad_packages` (
`id` int (111) NOT NULL auto_incremment,
`title` varchar (132) NOT NULL default",
"price" float NOT NULL default "0",
`type` varchar (22) NOT NULL default",
"c_type" enum ("készpénz", "pontok", "rur") NOT NULL default "cash",
ELSŐDLEGES KULCS("id")
);

Elsődleges kulcs / SQL / MySQL... 5. példa.

TÁBLÁZAT LÉTREHOZÁSA "gamestat" (
`id` int (11) NOT NULL auto_incremment,
`game` varchar (10) NOT NULL default 'tuz',
`stavok` int (11) NOT NULL alapértelmezett '0',
`usd` float NOT NULL default '0',
`rur` float NOT NULL default '0',
`point` float NOT NULL default '0',
`bank_usd` decimális (12,2) NOT NULL alapértelmezett„ 0.00 ”,
`bank_rur` decimális (12,2) NOT NULL alapértelmezett„ 0.00 ”,
`bank_pont` decimális (12,2) NOT NULL alapértelmezett '0.00',
ELSŐGOMB ("id")
);

A P rimary Key egy tábla mezője, amely egyedileg azonosítja az adatbázis tábla minden sorát / rekordját. Az elsődleges kulcsoknak egyedi értékeket kell tartalmazniuk. Az elsődleges kulcs oszlop nem tartalmazhat értéket.

Egy táblázatnak csak egy elsődleges kulcsa lehet, amely egy vagy több mezőből állhat. Ha több mezőt használ elsődleges kulcsként, akkor ezeket összetett kulcsnak nevezik.

Ha egy tábla bármelyik mezőjében meghatározta az elsődleges kulcsot, akkor nem rendelkezhet két olyan rekorddal, amelyek azonos értékűek az adott mező (k) számára.

jegyzet- Ezeket a fogalmakat használhatja adatbázis -táblák létrehozásakor.

Elsődleges kulcs létrehozása

Itt található az ID attribútum elsődleges kulcsként történő meghatározásának szintaxisa az Ügyfelek táblázatban.

TÁBLÁZATI ÜGYFÉLEK LÉTREHOZÁSA (ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, CÍMKARA (25), Fizetési Tizedesjegy (18, 2), ELSŐGOMB) (azonosító));

Elsődleges kulcskorlátozás létrehozásához az "ID" oszlopban, amikor az ÜGYFELTÁR már létezik, használja a következő SQL szintaxist:

ALTER TABLE ÜGYFELEK HOZZÁADÓK ELSŐ GOMBOT (azonosító);

jegyzet

Ha az ALTER TABLE utasítást használja elsődleges kulcs hozzáadásához, akkor az elsődleges kulcs oszlop (oka) t már nem NULL értékűnek kell nyilvánítani (ha a táblázatot először hozták létre).

Az elsődleges kulcs több oszlopban történő meghatározásához használja az alábbi SQL szintaxist:

TÁBLÁZATI ÜGYFÉLEK LÉTREHOZÁSA (ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, CÍMKARA (25), Fizetési Tizedesjegy (18, 2), ELSŐGOMB) (azonosító, NEV));

Elsődleges kulcskorlátozás létrehozásához az "ID" és a "NAME" oszlopokban, amikor a VEVŐK tábla már létezik, használja a következő SQL szintaxist.

TÁBLÁZAT VÁLTOZTATÁSA ÜGYFELEK HOZZÁADÁSA PK_CUSTID PRIMARY KULCS (azonosító, név);

Az elsődleges kulcs eltávolítása

Az elsődleges kulcskorlátozásokat a táblázatból törölheti az alábbi szintaxis használatával.

ALTER TABLE ÜGYFÉLEK DOLGOZZUK AZ ELSŐ GOMBOT;



Tetszett a cikk? Oszd meg