01 · Metaadatok
Adatok az adatokról: a rendszerkatalógus
A műhelyfoglalkozás címét, kezdési időpontját és létszámát az alkalmazás adataként tároljuk. Más természetű állítás, hogy a kezdési időpont mezője időbélyeg típusú, vagy hogy a műhelyazonosító elsődleges kulcs. Az első a szervezett foglalkozásról mond valamit, a második az azt leíró adatszerkezetről. Ezt a különbséget használjuk az adat és a metaadat megkülönböztetésére.
Az adatbázis-kezelőnek nem elég a rekordok tartalmát ismernie: tudnia kell, melyik táblában milyen oszlopok vannak, hogyan értelmezze az értékeket, melyik kulcs azonosít egy sort, és milyen kapcsolatok vagy ellenőrzések érvényesek. Az ehhez szükséges leírásokat a rendszerkatalógusban kezeli. Emiatt az adatbázis önmagáról is hordoz strukturált információt.
A katalógus logikai szinten elképzelhető egy kisebb adatbázisként az adatbázison belül. A benne tárolt leírások között ugyanúgy lehetnek kulcsok és kapcsolatok, mint egy felhasználói adatmodellben. A tényleges megvalósítás azonban rendszerfüggő: egyes információkat rendszertáblák, másokat nézetek vagy belső adatszerkezetek tesznek elérhetővé.
A katalógus nem azonos az összes üzleti adat másolatával, és nem azonos a tranzakciós naplóval sem. A katalógus elsődlegesen azt mondja meg, hogyan épül fel és milyen szabályokkal használható az adatbázis. A napló a műveletek helyreállításához szükséges információkat kezeli; a biztonsági mentés pedig külön helyreállítási célú másolat.
| Állítás | Besorolás | Indok |
|---|---|---|
| A Robotépítés műhely 14 órakor kezdődik. | Alkalmazásadat | Egy konkrét foglalkozás tulajdonsága. |
| A kezdes oszlop TIMESTAMP típusú. | Metaadat | Az oszlop értelmezését írja le. |
| A műhely helyszíne a Makerspace. | Alkalmazásadat | Egy foglalkozáshoz rendelt helyszín. |
| A helyszin_id idegen kulcs. | Metaadat | A táblák közötti hivatkozás szabálya. |
| A muhely_cim_ix a cim oszlop indexe. | Metaadat | Az adatelérés egyik szerkezetét írja le. |
02 · Metaadatok
Miért van szüksége a DBMS-nek a katalógusra?
Egy CREATE TABLE utasítás új táblát definiál. A rendszernek rögzítenie kell a táblanévhez tartozó oszlopokat, azok típusát, a kulcsokat és a megadott megszorításokat. Később a SELECT, INSERT vagy UPDATE feldolgozásakor már ezekhez a leírásokhoz fordul: ezek alapján ellenőrzi, létezik-e a hivatkozott objektum, és összeegyeztethető-e a művelet a szerkezettel.
Ha a SELECT cim FROM MUHELY lekérdezést írjuk, a rendszer ellenőrzi a MUHELY tábla és a cim oszlop létezését. Egy hibás nevű oszlopra hivatkozás már a lekérdezés értelmezésénél elutasítható. Az eredmény típusának megállapításához ugyancsak az oszlopok leírásaira van szükség; nem kell minden tárolt értéket megvizsgálni ahhoz, hogy a rendszer tudja az oszlop deklarált típusát.
A megszorításokat ellenőrző részek a kulcsok és hivatkozások leírását használják. A lekérdezés-optimalizáló az elérhető indexek és egyéb tervezési információk alapján mérlegelhet végrehajtási lehetőségeket. Az index létezése még nem jelenti, hogy minden lekérdezés használni fogja: a döntés a feltételektől, a becsült költségektől és a rendszer működésétől is függ.
A felhasználó számára egy grafikus adatbázis-kezelő gyakran éppen a katalógus lekérdezésével állítja elő a táblalistát, a mezők listáját vagy a kapcsolati nézetet. A fejlesztő dokumentáció készítéséhez, a rendszergazda jogosultságok ellenőrzéséhez, a tervező pedig a megvalósult modell összevetéséhez használhatja ezeket az adatokat.
Kidolgozott példa · Mit vizsgál meg egy beszúrásnál a rendszer?
Új műhelyt szeretnénk felvenni a MUHELY táblába.
- Azonosítja a táblát és a megadott oszlopokat.
- Ellenőrzi az értékek típusát, a kötelező mezőket és a megadott szabályokat.
- Az elsődleges kulcs alapján vizsgálja az azonosító egyediségét.
- Az idegen kulcsok alapján ellenőrzi a helyszín és az oktató hivatkozását.
- Csak a szükséges további feltételek teljesülésével hajtja végre a beszúrást.
03 · Metaadatok
A végigkövetett példa: műhelyfoglalkozások
Egy iskolai műhelyprogramban nyilvántartjuk a foglalkozásokat, a helyszíneket és az oktatókat. Minden műhelyhez pontosan egy helyszín és pontosan egy felelős oktató tartozik. Egy helyszín több műhelynek is otthont adhat, és egy oktató több műhelyért is felelhet. Olyan helyszín vagy oktató is szerepelhet a nyilvántartásban, amelyhez még nem rendeltünk műhelyt.
A MUHELY tábla hat oszlopot tartalmaz: muhely_id, cim, helyszin_id, oktato_id, kezdes és max_letszam. A HELYSZIN három oszlopa helyszin_id, nev és ferohely. Az OKTATO három oszlopa oktato_id, nev és email. A táblák azonosítói egész számok; a nevek és címek szövegek, a kezdés időbélyeg. A két MUHELY-beli hivatkozó oszlop kötelező.
A nev attribútum két külön táblában is megjelenik. Ez nem névütközés a modellen belül: HELYSZIN.nev és OKTATO.nev két külön oszlop. Ugyanígy a helyszin_id név egyszer azonosító, máskor hivatkozó mező. A katalógusnak ezért az oszlopot a táblájával együtt kell azonosítania; az oszlopnév önmagában nem elég.
A példában azonosítók alapján hivatkozunk, a címekre és nevekre pedig külön indexet is tervezünk. Ezek az indexek nem teszik kötelezően egyedivé a címet vagy a nevet. Két oktatónak lehet azonos neve, két műhelynek pedig azonos címe. A logikai kulcsot az azonosító adja, az index a keresést segíti.
| Tábla | Oszlopok | Kulcs és kapcsolat |
|---|---|---|
| HELYSZIN | helyszin_id, nev, ferohely | PK: helyszin_id |
| OKTATO | oktato_id, nev, email | PK: oktato_id |
| MUHELY | muhely_id, cim, helyszin_id, oktato_id, kezdes, max_letszam | PK: muhely_id; FK: helyszin_id és oktato_id |
Kidolgozott példa · Egy konkrét foglalkozás
A 101 azonosítójú Robotépítés műhely a 7 azonosítójú helyszínen, a 12 azonosítójú oktató felelősségével indul.
- A MUHELY sor értékei: 101; Robotépítés; 7; 12; 2026-11-06 14:00; 24.
- A HELYSZIN megfelelő sora: 7; Makerspace; 30.
- Az OKTATO megfelelő sora: 12; Fekete Réka; reka@iskola.example.
- A 7 és a 12 itt alkalmazásadat. Az, hogy melyik oszlopra hivatkoznak, metaadat.
04 · Metaadatok
A katalógus saját relációs modellje
A következő hat táblát oktatási célú, egyszerűsített katalógusként használjuk. A RELACIO a táblákat, az ATTRIBUTUM a táblák oszlopait, a KULCS a kulcsokat, az IDEGEN_KULCS a hivatkozási célokat, az INDEX az indexeket, az INDEX_TAG pedig az indexekben részt vevő oszlopokat írja le. Ezek nem egy konkrét adatbázis-kezelő belső rendszertábláinak nevei.
A felhasználói tábla a katalógusban egy leíró sorral jelenik meg. A MUHELY hat oszlopa hat ATTRIBUTUM-sorhoz vezet. Ha ugyanarra a táblára több indexet hozunk létre, több INDEX-sor lesz. Az egyes szerkezetek külön tárolása segít elkerülni, hogy egyetlen sorba változó hosszúságú oszlop- vagy indexlistákat zsúfoljunk.
Az egyszerűség kedvéért egyetlen névtérben dolgozunk, és az indexneveket ebben egyedinek tekintjük. Valós rendszerekben az adatbázis, a séma vagy egy belső objektumazonosító is része lehet az azonosításnak. Ezért a táblanév egyedisége nem minden helyzetben feltételezhető az egész kiszolgálóra kiterjedően.
A modell a példa egyoszlopos elsődleges és idegen kulcsaira épül. A kulcsjel mezőben 1 jelöli az elsődleges kulcs oszlopát, 0 a kulcshoz nem tartozó oszlopot, −1 és −2 pedig a két idegen kulcs oszlopát. Ez helyi tanítási jelölés, nem SQL-szabvány. Több kulcsban részt vevő oszlopok és összetett hivatkozások általános kezeléséhez külön kulcstagsági relációra lenne szükség.
| Reláció | Elsődleges kulcs a modellben | Mit ír le? |
|---|---|---|
| RELACIO | relacionév | Egy felhasználói tábla neve és oszlopainak száma. |
| ATTRIBUTUM | (relacionév, attribútumnév) | Egy adott tábla egy adott oszlopa. |
| KULCS | (relacionév, kulcsjel) | A példában használt elsődleges vagy idegen kulcs. |
| IDEGEN_KULCS | (relacionév, kulcsjel) | A helyi idegen kulcs hivatkozási célja. |
| INDEX | indexnév | Egy index táblája és szerepe. |
| INDEX_TAG | (indexnév, pozíció) | Az index adott helyén álló oszlop. |
Kapcsolatok a katalóguson belül
ATTRIBUTUM.relacionév → RELACIO.relacionév
KULCS.relacionév → RELACIO.relacionév
IDEGEN_KULCS.(relacionév, kulcsjel) → KULCS.(relacionév, kulcsjel)
IDEGEN_KULCS.(célreláció, célattribútum) → ATTRIBUTUM.(relacionév, attribútumnév)
INDEX.relacionév → RELACIO.relacionév
INDEX_TAG.indexnév → INDEX.indexnév
INDEX_TAG.(relacionév, attribútumnév) → ATTRIBUTUM.(relacionév, attribútumnév)
05 · Metaadatok
Relációk és attribútumok nyilvántartása
A RELACIO táblában a három alkalmazástáblához három sor tartozik. A név mellett feltüntetjük az oszlopok számát: a HELYSZIN és az OKTATO esetében 3, a MUHELY esetében 6. Ez nem a rekordok száma. Egy hat oszlopos táblának nulla vagy sok ezer sora is lehet, miközben az oszlopok száma változatlan marad.
Az ATTRIBUTUM táblában a három tábla összesen tizenkét oszlopáról tárolunk egy-egy sort. A táblanév és az attribútumnév együtt azonosítja a leírást. Az összetett kulcs magyarázata kézzelfogható: a nev oszlop két helyen szerepel, de a HELYSZIN–nev és OKTATO–nev pár egyértelműen különbözik.
Az adattípus nem egy aktuális rekordból kikövetkeztetett tulajdonság, hanem a szerkezetben deklarált előírás. A VARCHAR(80) szöveges mezőt jelöl, a TIMESTAMP időpontot. A példában külön oszlopban jelezzük a kötelezőséget is. A típus önmagában nem mondja meg, lehet-e hiányzó érték, és nem helyettesíti az olyan üzleti szabályt, hogy a maximális létszámnak pozitívnak kell lennie.
Az oszlopszám ellenőrizhető az ATTRIBUTUM sorainak táblánkénti megszámlálásával. Ilyen ellenőrzéskor a katalógus belső összhangját vizsgáljuk. Egy teljes katalógus a sorrendet, az alapértelmezett értéket, további megszorításokat és más oszloptulajdonságokat is tárolhatja; a bemutatott részlet ezeknek csak egy áttekinthető kivonata.
| relacionév · PK | oszlopszám |
|---|---|
| HELYSZIN | 3 |
| OKTATO | 3 |
| MUHELY | 6 |
| relacionév · PK-rész | attribútumnév · PK-rész | adattípus | kötelező | kulcsjel |
|---|---|---|---|---|
| HELYSZIN | helyszin_id | INTEGER | igen | 1 |
| HELYSZIN | nev | VARCHAR(80) | igen | 0 |
| HELYSZIN | ferohely | INTEGER | igen | 0 |
| OKTATO | oktato_id | INTEGER | igen | 1 |
| OKTATO | nev | VARCHAR(80) | igen | 0 |
| OKTATO | VARCHAR(120) | igen | 0 | |
| MUHELY | muhely_id | INTEGER | igen | 1 |
| MUHELY | cim | VARCHAR(100) | igen | 0 |
| MUHELY | helyszin_id | INTEGER | igen | -1 |
| MUHELY | oktato_id | INTEGER | igen | -2 |
| MUHELY | kezdes | TIMESTAMP | igen | 0 |
| MUHELY | max_letszam | INTEGER | igen | 0 |
A kulcsjel a bemutatott egyszerűsített modell helyi kódja. A katalógus ATTRIBUTUM táblájának kulcsa ettől függetlenül a táblanév és oszlopnév együtt.
06 · Metaadatok
Kulcsok és idegen kulcsok leírása
A KULCS táblában külön sor szerepel mindhárom elsődleges kulcshoz és a MUHELY két idegen kulcsához. Az azonosításhoz a reláció neve és a helyi kulcsjel együtt szükséges. A HELYSZIN,1 és az OKTATO,1 nem azonos kulcs: a kód ugyanaz, a tábla különbözik. A kulcstípus leírja a szerepet, az ATTRIBUTUM-sorok pedig megmutatják a példában részt vevő oszlopot.
A hivatkozás célját nem szabad pusztán az azonos nevű oszlopokból kitalálni. A MUHELY.helyszin_id azért utal a HELYSZIN.helyszin_id mezőre, mert ezt a definíció előírja. Más nevű oszlopok között is lehet idegen kulcs, azonos nevű oszlopok között pedig nem feltétlenül van kapcsolat. A katalógusban ezért a célrelációt és a célattribútumot kifejezetten megadjuk.
Az IDEGEN_KULCS két sora a MUHELY,−1 és MUHELY,−2 helyi kulcsazonosítókhoz tartozik. Az első a helyszínek, a második az oktatók elsődleges kulcsára hivatkozik. A hivatkozott oszlop leírásának létezése önmagában még nem elég: az adatmodellben annak megfelelő egyediségét is biztosítani kell. A példában ezt mindkét céloldali elsődleges kulcs teljesíti.
A kötelező hivatkozó mező és az idegen kulcs együtt azt jelenti, hogy minden MUHELY sorhoz meg kell adni egy létező helyszínt és egy létező oktatót. A céloldalon azonban nem következik, hogy minden helyszínhez vagy oktatóhoz már tartozik műhely. Az egy-több kapcsolat minimumai ezért eltérnek: a műhely oldalán egy, a helyszín és az oktató oldalán nulla vagy több kapcsolódó műhely lehet.
| relacionév · PK-rész | kulcsjel · PK-rész | kulcstípus | támogató index a példában |
|---|---|---|---|
| HELYSZIN | 1 | elsődleges | helyszin_pk_ix |
| OKTATO | 1 | elsődleges | oktato_pk_ix |
| MUHELY | 1 | elsődleges | muhely_pk_ix |
| MUHELY | -1 | idegen | muhely_helyszin_ix |
| MUHELY | -2 | idegen | — nincs külön index |
| relacionév · PK-rész | kulcsjel · PK-rész | célreláció | célattribútum |
|---|---|---|---|
| MUHELY | -1 | HELYSZIN | helyszin_id |
| MUHELY | -2 | OKTATO | oktato_id |
Kidolgozott példa · Hivatkozás visszafejtése
A katalógusban MUHELY,−2 szerepel.
- Az ATTRIBUTUM sorokban a MUHELY,−2 jel az oktato_id oszlophoz tartozik.
- A KULCS sor szerint ez idegen kulcs.
- Az IDEGEN_KULCS sor célja OKTATO.oktato_id.
- Az OKTATO.oktato_id azonosító elsődleges kulcs; minden műhely egy létező oktatóra utal.
07 · Metaadatok
Indexek és az indexekben részt vevő oszlopok
A kulcs logikai előírás, az index hozzáférési szerkezet. A példában a három elsődleges kulcsot támogató indexek mellett a MUHELY.cim, MUHELY.helyszin_id és OKTATO.nev oszlopokon szerepel külön keresési index. A cím- és névindex nem egyedi: ismétlődő értékek is lehetnek bennük. A logikai kulcs és a fizikai megvalósítás szerepét akkor is külön kell megérteni, ha a rendszer ezek között kapcsolatot tart fenn.
Az INDEX tábla megadja az index nevét, a hozzá tartozó táblát és a példában betöltött szerepét. A támogatási szerep elnevezése nem állítás a tárolt rekordok fizikai sorrendjéről. Az elsődleges kulcsot támogató index nem minden rendszerben jelenti azt, hogy a tábla teljes adatterülete az adott kulcs szerint fizikailag rendezett.
Az INDEX_TAG táblában külön sor jelöli az index minden oszlopát és annak pozícióját. A jelenlegi hat index mind egyoszlopos, ezért mindegyiknél 1 a pozíció. Egy későbbi, (helyszin_id, kezdes) összetett indexhez két tagsági sor kellene: az első pozícióban helyszin_id, a másodikban kezdes. A sorrend érdemi információ, nem felcserélhető felsorolás.
A külön tagsági tábla előnye, hogy egy oszlop nulla, egy vagy több indexben is szerepelhet. A MUHELY.oktato_id például idegen kulcs, de itt nincs rajta külön index. Az, hogy egy oszlop nincs indexelve, nem teszi érvénytelenné a hivatkozását. Az indexelés megválasztása az ellenőrzési és keresési költségeket befolyásolhatja, de nem pótolja az idegen kulcs deklarációját.
| indexnév · PK | relacionév | szerep | egyedi |
|---|---|---|---|
| helyszin_pk_ix | HELYSZIN | elsődleges kulcs támogatása | igen |
| oktato_pk_ix | OKTATO | elsődleges kulcs támogatása | igen |
| muhely_pk_ix | MUHELY | elsődleges kulcs támogatása | igen |
| muhely_cim_ix | MUHELY | keresési index | nem |
| muhely_helyszin_ix | MUHELY | keresési index | nem |
| oktato_nev_ix | OKTATO | keresési index | nem |
| indexnév · PK-rész | pozíció · PK-rész | relacionév | attribútumnév |
|---|---|---|---|
| helyszin_pk_ix | 1 | HELYSZIN | helyszin_id |
| oktato_pk_ix | 1 | OKTATO | oktato_id |
| muhely_pk_ix | 1 | MUHELY | muhely_id |
| muhely_cim_ix | 1 | MUHELY | cim |
| muhely_helyszin_ix | 1 | MUHELY | helyszin_id |
| oktato_nev_ix | 1 | OKTATO | nev |
Az indexhez tartozó tábla és a tagsági sor relacionév értéke legyen összhangban. Ez a modell egyik ellenőrizendő szabálya.
08 · Metaadatok
A logikai modell visszaállítása a katalógusból
Először a RELACIO sorokból összeírjuk a táblákat. Ezután táblánként kiválogatjuk az ATTRIBUTUM sorokat, és felsoroljuk a mezőket a típusukkal és kötelezőségükkel együtt. Már ezen a ponton ellenőrizhető, hogy a felismert oszlopok száma egyezik-e a RELACIO oszlopszám mezőjével. A MUHELY-nél hat, a másik két táblánál három oszlopot kell kapnunk.
A KULCS és az ATTRIBUTUM leírásából megjelöljük az elsődleges kulcsokat. Az IDEGEN_KULCS sorait ezután felhasználjuk a hivatkozási élek felrajzolásához. A cél megállapításakor együtt vizsgáljuk a helyi kulcsazonosítót, a hivatkozó oszlopot, a célrelációt és a célattribútumot. E lépésekkel megkapjuk a megvalósított relációs séma alapvető szerkezetét.
Az indexeket külön rétegként tüntetjük fel. Az indexjelzés hasznos a megvalósítás áttekintéséhez, de egy tisztán fogalmi ER-modellben általában nem a hozzáférési szerkezeteket ábrázoljuk. A visszaállított séma tehát segíthet egy ER-ábra készítésében, de az eredeti fogalmi modell és az üzleti követelmények minden részlete nem vezethető le automatikusan a táblákból.
A kapcsolatokból például megállapítható a műhely kötelező helyszíne és oktatója. Nem derül ki viszont ebből a kivonatból, engedélyezett-e két műhely időbeli átfedése azonos helyszínen, vagy hogy a max_letszam nem haladhatja-e meg a helyszín férőhelyét. Ezek külön üzleti szabályok, amelyekhez további megszorítás, alkalmazáslogika vagy dokumentáció kell.
A katalógusban leírt séma
MUHELY
- muhely_idPK
- cim
- helyszin_idFK
- oktato_idFK
- kezdes
- max_letszam
HELYSZIN
- helyszin_idPK
- nev
- ferohely
OKTATO
- oktato_idPK
- nev
HELYSZIN 1 : N MUHELY — egy helyszínhez 0..N műhely tartozhat; minden műhelyhez pontosan 1 helyszín.
OKTATO 1 : N MUHELY — egy oktatóhoz 0..N műhely tartozhat; minden műhelyhez pontosan 1 oktató.
MUHELY: 6 oszlop, 3 kulcs, 2 idegen kulcs, 3 index.
| Oszlop | Típus | Kötelező | Kulcsjel |
|---|---|---|---|
| muhely_id | INTEGER | igen | 1 |
| cim | VARCHAR(100) | igen | 0 |
| helyszin_id | INTEGER | igen | -1 |
| oktato_id | INTEGER | igen | -2 |
| kezdes | TIMESTAMP | igen | 0 |
| max_letszam | INTEGER | igen | 0 |
Hivatkozási célok
- MUHELY.helyszin_id hivatkozása: HELYSZIN.helyszin_id.
- MUHELY.oktato_id hivatkozása: OKTATO.oktato_id.
Indexek és oszlopaik
- muhely_pk_ix: muhely_id — elsődleges kulcs támogatása; egyedi: igen.
- muhely_cim_ix: cim — keresési index; egyedi: nem.
- muhely_helyszin_ix: helyszin_id — keresési index; egyedi: nem.
PK: elsődleges kulcs; FK: idegen kulcs. Ez a tananyag katalóguskivonatának szemléltetése, nem egy élő adatbázis lekérdezése. Az indexek a kulcsjelölésektől külön szerepelnek.
Kidolgozott példa · Visszaállítási munkamenet
A metaadatokból a következő relációs sémát kapjuk.
- HELYSZIN(helyszin_id [PK], nev, ferohely).
- OKTATO(oktato_id [PK], nev, email).
- MUHELY(muhely_id [PK], cim, helyszin_id [FK → HELYSZIN.helyszin_id], oktato_id [FK → OKTATO.oktato_id], kezdes, max_letszam).
- A HELYSZIN–MUHELY és OKTATO–MUHELY kapcsolatok egy-több kapcsolatok.
- Az indexeket a katalógus külön sorai alapján tüntetjük fel, a kulcsjelölésektől elkülönítve.
09 · Metaadatok
Jogosultságok és elosztott adatbázisok metaadatai
Többfelhasználós rendszerben nem elég a táblákat és oszlopokat nyilvántartani: azt is ismerni kell, ki és milyen műveleteket végezhet rajtuk. A tulajdonos, a szerepkörök és az objektumszintű engedélyek ugyancsak metaadatok. A tanulói szerepkör például olvashat egy nyilvános műhelynézetet, az ügyintéző pedig a megfelelő táblában módosíthatja a foglalkozások adatait.
A tábla tulajdonosa és a rajta olvasási jogot kapó felhasználó nem azonos fogalom. Az engedélyezett műveletet is külön kell megadni: a SELECT jogból nem következik UPDATE vagy DELETE jog. A konkrét jogosultságvizsgálat szerepköröktől, örökléstől, nézetektől és rendszerfüggő szabályoktól is függhet; egy egyszerű jogosultságlista ezeknek csak részlete.
Elosztott adatbázisban az adatok több helyen lehetnek elérhetők. A rendszernek ismernie kell a részek vagy másolatok elhelyezését, és a szükséges működési információkat. Elképzelhető például, hogy a műhelyek egy része a szombathelyi, másik része a körmendi intézményhez tartozik, a központi jelentéskészítés pedig mindkét hely adatait használja.
Az elhelyezési leírás nem garantálja önmagában a másolatok naprakészségét. A konzisztencia biztosításához megfelelő működési protokollok és ellenőrzések is szükségesek. A katalógus a rendszer döntéseihez szükséges leírásokat adja; a tényleges szinkronizálást az adatbázis-kezelő és a kapcsolódó szolgáltatások végzik.
| Terület | Leíró adat | Mire használható? |
|---|---|---|
| Jogosultság | tanulo szerepkör: SELECT a NYILVANOS_MUHELY nézeten | Olvasási művelet engedélyének ellenőrzése. |
| Jogosultság | ugyintezo szerepkör: UPDATE a MUHELY táblán | Módosítás engedélyének ellenőrzése. |
| Tulajdonlás | MUHELY objektum tulajdonosa | Objektumkezelési felelősség és jogosultságok. |
| Elhelyezés | Egy adatrész a szombathelyi csomóponton található | A megfelelő adatforrás megkeresése. |
| Másolatok | A HELYSZIN adatok másolata a központban is elérhető | Replikáció és elérés szervezése. |
10 · Metaadatok
A katalógus olvasása és következetességének ellenőrzése
A rendszerkatalógus adatainak szabályos változtatását az adatbázis-kezelő által támogatott utasításokkal végezzük. Egy tábla vagy index létrehozásakor a rendszer a hozzá tartozó metaadatokat is kezeli. A belső rendszertáblák kézi átírását nem használjuk a tanulási példában: az eltérő szerkezeti leírások hibás vagy működésképtelen adatbázishoz vezethetnek.
Egy katalóguskivonat átvizsgálásánál először a hivatkozások célját keressük. Minden ATTRIBUTUM sor létező relációhoz tartozzon; minden INDEX_TAG sor létező indexet és az adott táblához tartozó oszlopot jelöljön. Az idegen kulcs céltáblája és céloszlopa létezzen, és a cél legyen megfelelően egyedi. A megszorítás értelmezéséhez a mezők típusának összeegyeztethetőségét is ellenőrizni kell.
A valódi adatbázis-kezelők egy része szabványosabb metaadatnézeteket is biztosít az INFORMATION_SCHEMA névtérben. Ezek nem feltétlenül tartalmaznak minden rendszerfüggő részletet. Az elérhető oszlopok és a látható objektumok a használt rendszertől, verziótól és jogosultságoktól is függhetnek. A következő SQL szemléltető lekérdezés, nem a fenti oktatási katalógustáblákon fut.
A grafikus sémanézet ugyanúgy metaadatokat jelenít meg, mint egy ilyen lekérdezés. Ha a táblák felrajzolása hiányos, meg kell vizsgálni a lekérdezés szűrését, a hozzáférési jogokat és azt, hogy a nézet milyen objektumtípusokat mutat. Egy üres lista nem minden esetben bizonyítja, hogy az adatbázisban semmilyen objektum nincs.
SELECT table_schema, table_name, column_name,
data_type, is_nullable, ordinal_position
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'muhely'
ORDER BY ordinal_position;Kidolgozott példa · Három hibás metaadat felismerése
Egy kézzel készített katalóguskivonatot ellenőrzünk.
- Hiba: a RELACIO MUHELY sorában 5 szerepel, az ATTRIBUTUM-ban 6 mező van. A kivonat oszlopszáma és részletes mezőlistája ellentmond egymásnak.
- Hiba: a MUHELY,−2 idegen kulcs célja OKTATO.oktatokod, miközben ilyen mező nincs. A célleírást a valós deklarációhoz kell javítani: OKTATO.oktato_id.
- Hiba: a muhely_cim_ix tagsági sora OKTATO.nev-re utal. Az index MUHELY-hez tartozik, ezért a tagság itt MUHELY.cim legyen.
11 · Önellenőrzés
Önellenőrzés és katalógustervezés
Először önállóan válaszolj, és indokold meg a döntésedet! A kérdés megnyitásakor megjelenik a megoldás és a magyarázat. Az összetett feladatban bővítsd a katalógus leírásait egy új táblával, új hivatkozással és összetett indexszel, majd ellenőrizd az összhangjukat.
1. Mi a különbség az adat és a metaadat között?
Az adat a nyilvántartott alkalmazási valóság egy elemét írja le, például egy foglalkozás címét. A metaadat az adat szerkezetéről, értelmezéséről vagy használati szabályáról szól, például a cím mező típusáról.
2. Miért nem elegendő a DBMS számára csak a rekordok tartalma?
A rendszernek az oszlopok típusát, a kulcsokat, a hivatkozásokat és a jogosultságokat is ismernie kell. E leírások nélkül nem tudná szabályosan értelmezni és ellenőrizni a műveleteket.
3. A MUHELY oszlopszáma 6. Hány rekordja van?
Ebből nem állapítható meg. A 6 a tábla oszlopainak száma, nem a sorok száma. A rekordok száma ettől független.
4. Miért összetett az ATTRIBUTUM elsődleges kulcsa?
Mert azonos oszlopnév több táblában is előfordulhat. A táblanév és az attribútumnév együtt azonosít egy adott oszlopot.
5. Az ATTRIBUTUM kulcsjel mezője 1. Ez a katalógussor elsődleges kulcsa?
Nem. Az 1 azt jelzi a példában, hogy a leírt alkalmazástábla oszlopa az elsődleges kulcshoz tartozik. A katalógus ATTRIBUTUM sorának elsődleges kulcsa a relacionév és az attribútumnév együtt.
6. Miből derül ki a MUHELY,−1 kulcs hivatkozási célja?
Az ATTRIBUTUM megadja a helyi helyszin_id oszlopot, a KULCS az idegen kulcs szerepét, az IDEGEN_KULCS pedig a HELYSZIN.helyszin_id célt.
7. Kell-e azonos nevűnek lennie a hivatkozó és hivatkozott oszlopnak?
Nem. A kapcsolatot a definíció írja elő, nem a névegyezés. A típusoknak és az egyediségre vonatkozó követelményeknek megfelelőnek kell lenniük.
8. A MUHELY.oktato_id nincs külön indexelve. Lehet ettől idegen kulcs?
Igen. Az idegen kulcs logikai hivatkozási megszorítás, az index külön hozzáférési szerkezet. A katalógusban a példában így is érvényes az oktatóra mutató kapcsolat.
9. A kulcsjel 0 kizárja az indexelést?
Nem. A MUHELY.cim kulcsjel értéke 0, mégis keresési indexet tervezünk rá. A kulcsszerep és az indexelés két külön tulajdonság.
10. Mit kell tárolni egy kétoszlopos indexhez az INDEX_TAG táblában?
Két sort ugyanahhoz az indexnévhez, 1 és 2 pozícióval. Meg kell adni a két oszlopot a helyes sorrendben; a sorrend az index leírásának része.
11. Minden helyszínhez kell tartoznia legalább egy műhelynek?
A megadott modell alapján nem. Minden műhelyhez kötelező létező helyszín tartozik, de egy helyszínhez nulla vagy több műhely kapcsolódhat.
12. A katalógusból automatikusan rekonstruálható minden üzleti szabály?
Nem. A leírt szerkezeti szabályok rekonstruálhatók, de a kivonatban nem szereplő üzleti követelmények nem. Például az időbeli ütközések tiltása nem következik önmagában a két idegen kulcsból.
13. Mit jelent az, hogy egy szerepkörnek SELECT joga van egy nézeten?
A megfelelő jogosultsági szabályok szerint olvashatja az adott nézetet. Ebből nem következik módosítási vagy törlési jog az alaptáblán.
14. A katalógus egyenértékű egy biztonsági mentéssel?
Nem. A katalógus a szerkezetet és szabályokat írja le. A mentés helyreállítási célú másolat, amely az alkalmazásadatokat is tartalmazhatja. A katalógus nem pótolja a mentést.
15. Az üres metaadat-lekérdezés biztosan azt jelenti, hogy nincs tábla?
Nem feltétlenül. Lehet hibás a séma- vagy táblanév szerinti szűrés, korlátozott a felhasználó láthatósága, vagy a nézet csak bizonyos objektumtípusokat mutat.
16. Hogyan különbözik az elhelyezési metaadat a replikáció működésétől?
A metaadat leírhatja, hol található egy adatrész vagy másolat. A másolatok tényleges frissítését és a kívánt konzisztenciát a működési mechanizmusok biztosítják, nem önmagában a leíró sor.
Összetett feladat: bővítsd és ellenőrizd a katalógust!
A műhely-adatbázisban szeretnénk felvenni a szervezőket. Hozz létre egy SZERVEZO(szervezo_id, nev, telefon) táblát. A MUHELY kapjon egy kötelező szervezo_id oszlopot, amely a SZERVEZO elsődleges kulcsára hivatkozik. Legyen külön, nem egyedi index a szervező nevére, valamint a MUHELY(helyszin_id, kezdes) oszloppárra ebben a sorrendben.
- Add meg a RELACIO új sorát és a MUHELY megváltozott oszlopszámát!
- Írd le a négy új ATTRIBUTUM-sort! A szervezőre mutató idegen kulcs helyi jelölése legyen −3; a telefon mező lehessen hiányzó.
- Add meg a KULCS és IDEGEN_KULCS szükséges új sorait! A MUHELY új hivatkozó oszlopára most ne tervezz külön indexet.
- Írd le a három új INDEX-sort és a hozzájuk tartozó négy INDEX_TAG-sort!
- Állítsd vissza a SZERVEZO–MUHELY kapcsolatot, majd ellenőrizd az oszlopszámot, a hivatkozási célt és az összetett index sorrendjét!
Részletes mintamegoldás és indoklás
- RELACIO: új sor (SZERVEZO, 3). A MUHELY oszlopszáma 6-ról 7-re módosul. A HELYSZIN és OKTATO sorai változatlanok.
- ATTRIBUTUM új sorok: (SZERVEZO, szervezo_id, INTEGER, igen, 1); (SZERVEZO, nev, VARCHAR(80), igen, 0); (SZERVEZO, telefon, VARCHAR(30), nem, 0); (MUHELY, szervezo_id, INTEGER, igen, −3). A telefonszám szövegként megőrzi a + jelet és az esetleges kezdő nullát is.
- KULCS: (SZERVEZO, 1, elsődleges, szervezo_pk_ix) és (MUHELY, −3, idegen, nincs külön index). IDEGEN_KULCS: (MUHELY, −3, SZERVEZO, szervezo_id). A hivatkozott SZERVEZO.szervezo_id elsődleges kulcs, ezért a céloldali egyediség adott.
- INDEX: (szervezo_pk_ix, SZERVEZO, elsődleges kulcs támogatása, igen); (szervezo_nev_ix, SZERVEZO, keresési index, nem); (muhely_helyszin_kezdes_ix, MUHELY, keresési index, nem). INDEX_TAG: (szervezo_pk_ix, 1, SZERVEZO, szervezo_id); (szervezo_nev_ix, 1, SZERVEZO, nev); (muhely_helyszin_kezdes_ix, 1, MUHELY, helyszin_id); (muhely_helyszin_kezdes_ix, 2, MUHELY, kezdes). Az új összetett index nem követeli meg a helyszín–kezdés pár egyediségét.
- Minden műhelynek pontosan egy létező szervezője van, egy szervezőhöz nulla vagy több műhely tartozhat. A MUHELY mezőlistájában hét elem legyen. Az új hivatkozási cél ténylegesen SZERVEZO.szervezo_id, és a −3 jel ugyanazt a helyi kulcsot azonosítja a kapcsolódó katalógustáblákban. Az összetett index helyes sorrendje helyszin_id, majd kezdes; a már meglevő egyoszlopos helyszínindex is megmarad, hacsak külön nem töröljük.
A fejezet végére megkülönbözteted az adatot a metaadattól, összekapcsolod a katalógus leírásait, és vissza tudod állítani belőlük a bemutatott relációs sémát.