01 · Többfelhasználós rendszerek
Nézetek: ugyanazok az adatok, eltérő felhasználói kép
Egy többfelhasználós adatbázisban nem mindenkinek ugyanaz az információ kell. Egy műhelyfoglalkozásra jelentkező tanuló a címet, kezdési időt és szabad helyeket szeretné látni. A szervező ezenfelül a kapacitást, felelős elérhetőségét és belső költséget is kezeli. Az adatokat nem szükséges két egymástól független táblában megismételni: ugyanahhoz a logikai adathoz különböző nézetek rendelhetők.
A nézet kapcsolatot teremt a külső felhasználói kép és a teljes logikai séma között. A tervezésben ez egy felhasználói részséma, a megvalósításban például egy SQL CREATE VIEW utasítással létrehozott objektum. A nézet által biztosított információt az alaptáblák adataiból kell következetesen levezetni, nem kézzel fenntartott másolatból.
A hagyományos nézetnek van tárolt definíciója és egyéb metaadata, ezért nem teljesen hely nélküli objektum. Általában azonban nem tárolja önállóan az eredmény rekordjait. A materializált nézet eltérő fogalom: az eredmény fizikai tárolását és frissítését is kezelni kell. A további példák hagyományos nézetekről szólnak.
Egy nézet eredménye attól is függ, melyik tranzakciós pillanatképet látja a lekérdezés. Az „az alaptábla megváltozott, ezért a nézet is megváltozik” elv nem azt jelenti, hogy minden kapcsolat minden pillanatban ugyanazt a legújabb, még nem véglegesített állapotot olvassa. Az izoláció szabályai a nézet lekérdezésére is érvényesek.
| id | cím | kezdés | kapacitás | szabad hely | belső költség | felelős e-mail | állapot |
|---|---|---|---|---|---|---|---|
| 101 | Robotépítés | 2026-11-06 14:00 | 24 | 18 | 48000 | robot@iskola.example | publikus |
| 102 | Digitális plakát | 2026-11-07 15:00 | 20 | 9 | 12000 | grafika@iskola.example | publikus |
| 103 | 3D prototípus | 2026-11-10 14:00 | 12 | 12 | 35000 | labor@iskola.example | tervezet |
Saját oktatási adatok. Az e-mail-címek szemléltető, fenntartott példadomainhez tartoznak.
02 · Többfelhasználós rendszerek
Oszlop- és sorszűrés a nézetben
A tanulói nézet a MUHELY tábla cím, kezdés és szabad_hely oszlopát mutatja. Az azonosító megtartható technikai célra, például jelentkezési hivatkozás létrehozásához. A belso_koltseg és felelos_email nem tartozik a tanulói információhoz. Ez az oszlopok kiválasztásának, relációs megfogalmazásban projekciónak egy példája.
A WHERE allapot = 'publikus' feltétel a tervezett, még nem közzétett foglalkozásokat kizárja. Ez sorszűrés. Az oszlop- és sorszűrés egymástól független döntés: az oszlopok elhagyása nem rejti el automatikusan a tervezet sorát, és a sor kiszűrése sem rejti el a többi sor belső költségét.
A nézet további lekérdezések FROM részében használható. A nézet neve mögött álló definíció egységesíti az ismétlődő szűrést, így az alkalmazás több pontja ugyanazt a szabályt használhatja. A SELECT nem garantál eredménysorrendet ORDER BY nélkül; a megjelenítési sorrendet a használó lekérdezésben is megadjuk.
Az explicit oszloplista jobban követhető, mint a SELECT *. Ha később az alaptáblát új belső attribútummal bővítjük, meg kell vizsgálni a nézetdefiníciót és a jogosultságokat. Összekapcsolást vagy összesítést tartalmazó nézet is készíthető, de ezek módosíthatósága már külön kérdés.
CREATE VIEW tanuloi_muhely AS
SELECT muhely_id, cim, kezdes, szabad_hely
FROM MUHELY
WHERE allapot = 'publikus';
SELECT cim, kezdes, szabad_hely
FROM tanuloi_muhely
ORDER BY kezdes, muhely_id;| cím | kezdés | szabad hely |
|---|---|---|
| Robotépítés | 2026-11-06 14:00 | 18 |
| Digitális plakát | 2026-11-07 15:00 | 9 |
A tervezet kimarad, a költség és e-mail oszlop nem szerepel.
03 · Többfelhasználós rendszerek
Nézet és jogosultság: két együtt működő eszköz
A nézet önmagában nem akadályozza meg az alaptábla közvetlen elérését. Ha a tanulói szerepkör SELECT joggal rendelkezik a teljes MUHELY táblára, a nézetből elhagyott költséget is lekérdezheti az alaptáblából. Korlátozott hozzáféréshez a teljes jogosultsági láncot kell vizsgálni, nem csupán a tanulói képernyőt.
A felhasználókhoz szerepkörök rendelhetők, például tanulo, szervezo és adatbazis_admin. A szerepkörhöz kapcsolt jogosultságok megkönnyítik az egységes kezelést. A szükséges legkisebb jogosultság elve szerint a tanuló nem kap szervezői módosítási jogot, a szervező pedig nem feltétlenül kap jogot a teljes séma törlésére.
A nézet mögötti jogosultságok ellenőrzése adatbázis-kezelőtől és a nézet beállításaitól függ. Egyes megoldásokban a tulajdonos jogosultságával elérhető az alaptábla, más beállítás a használó jogosultságait követeli meg. A tényleges védelmet ezért próbafelhasználóval teszteljük. Sorbiztonsági szabályok és más védelmi eszközök is részt vehetnek a megoldásban.
Nem minden nézet írható. Egyszerű, egy alaptáblára épülő nézet sok rendszerben módosítható, összesítést vagy összetett kapcsolást tartalmazó nézet nem feltétlenül. Az írhatóság sem azonos az engedélyezettséggel: technikailag írható nézeten is kell módosítási jog. A tanulói nézetet ebben a példában csak olvasásra használjuk.
| szerepkör | információ | megengedett tevékenység |
|---|---|---|
| tanuló | közzétett cím, időpont, szabad hely | olvasás; jelentkezés ellenőrzött alkalmazásművelettel |
| szervező | saját foglalkozások teljes üzleti adatai | karbantartás az alkalmazás szabályai szerint |
| adatbázis-felügyelő | séma, jogosultságok, működési információ | felügyelet és szabályozott adminisztráció |
Kidolgozott példa · Miért nem elég a nézet?
A tanulói nézet elrejti a költséget, de a tanuló a teljes alaptáblát is olvashatja.
- A nézet alakja megfelelő, a közvetlen alaptábla-jog viszont megkerüli a korlátozást.
- Át kell tekinteni a közvetlen és örökölt jogokat, valamint a nézet végrehajtási szabályait.
- A próba ellenőrzése két kérdés: a nézet olvasható-e, és a belső költség jogosulatlanul lekérdezhető-e?
04 · Többfelhasználós rendszerek
Az adatbázis használói, tervezői és felügyelői
Az adatbázis-felügyelő, gyakran DBA, az erőforrások, hozzáférési jogosultságok és működési feltételek felügyeletével foglalkozik. Idetartozhat a mentési és helyreállítási eljárás, a teljesítményfigyelés és az üzemeltetési beállítások kezelése. A felügyelő nem feltétlenül maga találja ki az összes üzleti szabályt; ezeket a tervezőkkel és felhasználókkal egyezteti.
Az adatbázis-tervező összegyűjti a különböző csoportok információigényeit, kialakítja a fogalmi és logikai sémát, a kapcsolatokat és megszorításokat. A nézetek kialakításával a részsémákat a teljes rendszerhez kapcsolja. A fizikai hozzáférési döntésekben a felügyelővel és az alkalmazás fejlesztőivel is együttműködhet.
A végfelhasználók jelentős része előkészített műveleteket hajt végre: a szervező egy űrlapon létrehoz foglalkozást, a tanuló jelentkezik. Ehhez nem kell SQL-t írniuk. Más használók önálló elemzéseket, ad hoc lekérdezéseket és jelentéseket készítenek. Az eltérő tudásszint nem értékítélet: különböző feladatokat és hozzáférési igényeket jelent.
Ugyanaz a személy kisebb szervezetben több szerepet is betölthet, de a felelősségek akkor is különböznek. Egy tanári tartalomfeltöltő felület használója nem automatikusan adatbázis-felügyelő. A szerepek és jogok elkülönítése segít, hogy egy tartalmi hiba ne váljon a teljes rendszert érintő adminisztrációs hibává.
| szerep | konkrét feladat | fontos együttműködés |
|---|---|---|
| DBA | mentés, jogosultság, terhelésfigyelés | üzemeltető és tervező |
| adatbázis-tervező | MUHELY és JELENTKEZES kapcsolata, kulcsok | tanárok, szervezők |
| előkészített műveletet használó végfelhasználó | jelentkezési űrlap kitöltése | alkalmazás |
| önálló lekérdezést készítő használó | részvételi statisztika elemzése | tervező és jogosultságkezelő |
05 · Többfelhasználós rendszerek
A háttérben dolgozó szereplők
Az adatbázis-kezelő rendszer tervezői és fejlesztői a DBMS komponenseit készítik. Ilyen komponens lehet a lekérdezésfeldolgozó, optimalizáló, tároláskezelő és tranzakciókezelő. Ők azt a szoftvert fejlesztik, amelyre az adott iskola vagy vállalkozás adatbázisa épül, nem elsősorban az iskola tábláit definiálják.
Az eszközfejlesztők adatmodellező, adatbetöltő, tesztadat-előállító, migrációs vagy teljesítményelemző segédprogramokat készítenek. Egy diagramot rajzoló eszköz megkönnyítheti a tervezést, de a fogalmi modell szakmai helyességét önmagában nem garantálja. A tesztadat-generáló eszköznek a kulcsokra és megszorításokra is figyelnie kell.
Az operátorok és karbantartók biztosítják a napi működés infrastruktúráját: például a felügyeleti jelzések kezelését, rendszeres feladatok végrehajtását és a tárhely működési feltételeit. A feladatok szervezetenként eltérő neveken jelenhetnek meg. A felhőszolgáltatás bizonyos technikai feladatokat átvállalhat, de az üzleti séma, hozzáférési igény és helyreállítási követelmény attól még a használó szervezet kérdése.
Az alkalmazásfejlesztő további fontos összekötő szerep: az űrlapot, lekérdezési hívást és tranzakcióhatárokat az adatbázis szabályaival együtt tervezi meg. Egy képernyő működése nem igazolja automatikusan a többfelhasználós működés helyességét. Az egységes eljáráshoz a szereplőknek a hibakezelést és ütközéseket is egyeztetniük kell.
| tevékenység | jellemző felelős |
|---|---|
| SQL végrehajtómotor fejlesztése | DBMS-fejlesztő |
| ER-ábrát készítő program fejlesztése | eszközfejlesztő |
| Mentési feladat futásának felügyelete | operátor / üzemeltető, a DBA eljárása szerint |
| Iskolai jelentkezési üzleti szabály | tervező és érintett felhasználók |
| Jelentkezési művelet biztonságos végrehajtása | alkalmazásfejlesztő és adatbázis-tervező |
06 · Többfelhasználós rendszerek
Tranzakció: összetett művelet egy logikai egységben
Egy jelentkezésnél nem elég csökkenteni a szabad helyet: a jelentkező rekordját is rögzíteni kell. Ha az első lépés megtörténik, a második pedig hibát jelez, a két adat ellentmondhat egymásnak. A tranzakció határainak kijelölése azt fejezi ki, hogy ezek a módosítások egy üzleti művelethez tartoznak.
A műveletsor elindul, ellenőrzi a feltételeket, módosítja az adatokat, majd siker esetén COMMIT zárja. Hiba vagy elutasított üzleti feltétel esetén ROLLBACK visszavonja a tranzakció módosításait. Az alkalmazásnak a sikertelen műveletre valóban visszavonási vagy megszakítási úton kell válaszolnia; a BEGIN leírása önmagában nem helyettesíti a hibakezelést.
Négy klasszikus tulajdonság az ACID: atomicitás, konzisztencia, izoláció és tartósság. Az atomicitás a teljes vagy semmi jelleg. A konzisztencia azt jelenti, hogy az érvényes állapotból az üzleti és adatbázis-szabályok szerinti érvényes állapotba jutunk; ehhez a helyes program és megszorítások is szükségesek. Az izoláció az egymás mellett végzett műveletek megfigyelhető kapcsolatát szabályozza. A tartósság a sikeresen véglegesített változások megőrzését jelenti a rendszer garanciái szerint.
A tranzakció nem mindig egyetlen SQL utasítás, és nem mindig egyezik egyetlen felhasználói kattintással. Egyetlen kattintás több adatbázis-műveletet és külső tevékenységet is indíthat. Az e-mail elküldése például nem válik automatikusan visszavonhatóvá attól, hogy az adatbázisban ROLLBACK történt. Az ilyen külső hatásokat külön, összehangolt eljárás szerint kezeljük.
| tulajdonság | követelmény |
|---|---|
| Atomicitás | Helycsökkentés és jelentkezésrögzítés együtt sikerül vagy együtt visszavonódik. |
| Konzisztencia | A szabad hely nem negatív, a jelentkező és műhely azonosítója érvényes. |
| Izoláció | Egy másik foglalás nem írja felül elveszett módosításként az eredményt. |
| Tartósság | A véglegesített jelentkezést a rendszer a vállalt hibatűrés szerint megőrzi. |
07 · Többfelhasználós rendszerek
COMMIT, ROLLBACK és helyes hibakezelés
Új mintapéldánkban két eszközraktár között hét készletelemet vezetünk át. Az A raktárban 20, B-ben 5 darab van. Sikeres átvezetés után A=13 és B=12, az összes darabszám továbbra is 25. Ha A csökkentése után B módosítása nem sikerül, A=13 és B=5 hibás, hiányzó készletet mutató állapot lenne.
Az alábbi pszeudokód nem egy konkrét SQL nyelvjárás futtatható tárolt eljárása. A vezérlési logikát mutatja: ellenőrizzük a mennyiséget és a két raktár létezését, megfelelően védjük a módosított sorokat, ellenőrizzük a forráskészletet, majd mindkét oldalt módosítjuk. Siker csak a COMMIT után jelenthető. Az alkalmazás és az adatbázis-kezelő hibakezelési együttműködése nélkül a pszeudokód nem teljes implementáció.
Az üzleti hiba például a nem létező raktár vagy az elégtelen készlet. Technikai hiba lehet kapcsolatvesztés, lemezhiba vagy ütközés miatti tranzakciómegszakítás. Az alkalmazásnak meg kell különböztetnie az elutasítást a bizonytalan kimeneteltől: ha a kapcsolat éppen a COMMIT válasza előtt szakad meg, nem feltétlenül tudjuk, sikerült-e a véglegesítés. Az újrapróbálkozáshoz azonosítható művelet és ellenőrzés szükséges, hogy ne vezessük át kétszer a készletet.
A ROLLBACK a saját tranzakció módosításait vonja vissza, nem az egész adatbázist állítja egy globális múltbeli pillanatra. Más felhasználó szabályosan véglegesített, független változásait nem töröljük el. Már sikeresen véglegesített üzleti művelet helyesbítéséhez általában új, kompenzáló tranzakciót indítunk; egy újonnan kiadott ROLLBACK nem időgép.
tranzakció indítása
ha mennyiség ≤ 0: visszavonás, elutasítás
forrás és cél szükséges sorainak védett elérése
ha forrás vagy cél hiányzik: visszavonás, elutasítás
ha forráskészlet < mennyiség: visszavonás, elutasítás
forráskészlet csökkentése
célkészlet növelése
ha bármely lépés hibás: ROLLBACK, hibajelzés
különben: COMMIT, sikerjelzésKidolgozott példa · Hiba a második módosításnál
A=20, B=5; hét darabot vezetnénk át, de a célraktár módosítása meghiúsul.
- A csökkentése még nem végleges: a tranzakció saját köztes értéke 13.
- A hibakezelés visszavonja a tranzakciót. A végleges adatbázis-állapot A=20, B=5 marad.
- Siker esetén ehelyett A=13, B=12 lenne. Mindkét helyes ágban az összkészlet 25.
08 · Többfelhasználós rendszerek
Naplózás és helyreállítás
Az adatbázisnak egy hiba után is el kell tudnia különíteni a sikeresen véglegesített és megszakadt műveleteket. A napló ezért tranzakcióazonosítókat, módosítási információkat és lezárási állapotokat rögzíthet. A konkrét rekordformátum adatbázis-kezelőnként eltér; az alábbi táblázat csak az elv megértésére szolgál.
Egy szemléltető napló tartalmazhatja a tranzakció azonosítóját, az érintett adatot és régi/új értéket. A valós rendszerek alkalmazhatnak fizikai vagy logikai naplórekordokat, több verziót és különböző visszaállítási eljárásokat. Nem helyes azt állítani, hogy minden rendszer szó szerint azonos régi/új értékű rekordot ír minden olvasásról.
A write-ahead logging elve szerint a helyreállításhoz szükséges naplóinformációt megfelelően tartóssá kell tenni a módosított adatlap tartós kiírása előtt. Ez lehetővé teszi, hogy az adatlapok kiírását és a tranzakció sikerének rögzítését összehangolt módon kezeljük. A pontos véglegesítési garanciát a rendszer és beállításai határozzák meg.
A tranzakciós napló nem helyettesíti a teljes mentési és helyreállítási tervet. Lehet szükség alapmentésre, naplóarchívumra és tényleges visszaállítási próbára is. A COMMIT, a naplózás és a mentés három kapcsolódó, de eltérő célú fogalom: üzleti lezárás, helyreállítási információ, illetve visszaállítható másolat és eljárás.
| tranzakció | esemény | érintett adat | régi | új |
|---|---|---|---|---|
| T41 | kezdés | – | – | – |
| T41 | módosítás | A raktár készlete | 20 | 13 |
| T41 | módosítás | B raktár készlete | 5 | 12 |
| T41 | véglegesítés | – | – | – |
Fogalmi példa, nem egy konkrét DBMS naplófájl-formátuma.
09 · Többfelhasználós rendszerek
Elveszett módosítás: amikor két helyes részszámítás hibás egészet ad
A Robotépítés foglalkozáson 18 szabad hely van. T1 négy, T2 hat helyet foglalna. Ha mindkét művelet 18-at olvas, T1 helyileg 14-et, T2 helyileg 12-t számol. Mindkét kivonás önmagában helyes. A teljes műveletsor viszont csak akkor helyes, ha a két foglalás után 18−4−6=8 hely marad.
Hibás egymásba fűzésben T1 beírja a 14-et, majd T2 a régi 18-ból számolt 12-t írja a közös adat helyére. A végső érték 12, így T1 négyhelyes foglalása elveszik a szabadhely-számításból. Ha két jelentkezési rekord közben ténylegesen létrejött, a foglalások és a szabad helyek már ellentmondanak egymásnak.
A jelenség nem csak valódi egyidejű processzorvégrehajtásnál fordulhat elő. Egyetlen processzor is felváltva hajthatja végre a két program részlépéseit. Ez a lépések egymásba fűzése. Az ütemezés azt írja le, milyen sorrendben szerepelnek a különböző tranzakciók olvasásai és írásai.
Az alábbi szemléltetés szándékosan a régi értékből számoló, külön olvasás–számolás–felülírás mintát mutatja. Nem azt állítja, hogy minden adatbázis-kezelő minden UPDATE-je így működik. A szabad_hely = szabad_hely − mennyiseg alakú, megfelelően ellenőrzött atomi adatbázis-módosítás és a konkurenciakezelés más viselkedést adhat. A konkrét megoldásnál a rendszer ütközési és izolációs szabályai számítanak.
| lépés | T1: 4 hely | T2: 6 hely | közös érték |
|---|---|---|---|
| 1 | 18 olvasása | – | 18 |
| 2 | – | 18 olvasása | 18 |
| 3 | 18−4=14 számítása | – | 18 |
| 4 | – | 18−6=12 számítása | 18 |
| 5 | 14 beírása | – | 14 |
| 6 | – | 12 beírása | 12 |
Elvárt eredmény 8, hibás eredmény 12: négy hely levonása elveszett.
Próbáld ki: két foglalás, egy közös helyszám
Kezdetben 18 hely. T1 foglalása 4, T2 foglalása 6. Elvárt végeredmény: 8.
Modelltároló
18
Végrehajtás közbeni, szemléltető érték.
T1 · négy hely
Olvasott: még nincs
Kiszámított: még nincs
T2 · hat hely
Olvasott: még nincs
Kiszámított: még nincs
0. lépés · Kezdőállapot
T1 négy, T2 hat helyet szeretne lefoglalni. Mindkettő sikerénél 8 szabad helynek kell maradnia.
Lépésmodell, nem futó SQL-adatbázis. A modelltároló a köztes módosításokat is szemlélteti; ez nem állítás arról, mit láthat egy külső olvasó. A tényleges láthatóságot az izoláció és a DBMS szabályai határozzák meg.
10 · Többfelhasználós rendszerek
Soros és sorosítható ütemezés, védelem az ütközések ellen
A legegyszerűbb helyes megoldásban T1 elvégzi a teljes négyhelyes foglalást és véglegesít. T2 ezt követően már 14-et olvas, abból hatot levon és 8-at ír be. A fordított soros sorrend ugyanerre a készleteredményre vezet: előbb 12, aztán 8. A soros futtatás fogalmilag egyszerű, de minden tranzakció teljes elkülönítése szükségtelenül csökkentheti a rendszer áteresztőképességét.
A cél általában nem minden felhasználó leállítása, hanem az egymással konfliktusban álló műveletek megfelelő összehangolása. Sorzárolásnál a módosítani kívánt rekordot a tranzakció védheti; egy másik módosító várhat, majd az aktuális állapotból folytat. A zárolás pontos hatása és időtartama rendszerfüggő, és egy közönséges SELECT nem minden rendszerben ugyanazt a zárat veszi fel, mint egy védett módosító olvasás.
Optimista megoldásnál verziószámmal ellenőrizhetjük, hogy az olvasás óta változott-e a rekord. A módosítás például csak a korábban látott verzió mellett hajtható végre; nulla módosított sor ütközést jelezhet. Ekkor nem írunk vakon a régi állapotból, hanem a teljes üzleti műveletet megfelelően újraértékeljük. Sorosítható izolációnál a rendszer is elutasíthat konfliktusos tranzakciót, amelyet az alkalmazásnak szükség szerint újra kell futtatnia.
Az alábbi SQL-minta fogalmi megoldásként egyetlen feltételes UPDATE-ben csökkenti a helyet. Az alkalmazásnak ellenőriznie kell a módosított sorok számát: ha nem pontosan egy, a foglalás elutasítandó. A jelentkezési rekord létrehozása ugyanahhoz a tranzakcióhoz tartozik. Az izoláció, megszorítások és motor tranzakciós képessége együtt biztosítják a tényleges működést; egy helyesnek látszó kódsor nem helyettesíti a többkapcsolatos tesztet.
BEGIN;
UPDATE MUHELY
SET szabad_hely = szabad_hely - 4
WHERE muhely_id = 101
AND szabad_hely >= 4;
-- Alkalmazás: pontosan 1 módosított sor?
-- Ha nem: ROLLBACK és elutasítás.
-- Ha igen: jelentkezési rekord rögzítése.
-- Ha az is sikeres: COMMIT.
-- Bármely hiba esetén: ROLLBACK.| módszer | alapelv | kezelendő következmény |
|---|---|---|
| soros / védett végrehajtás | a konfliktusos műveletek nem írnak egymás régi eredményére | várakozás és zárolási konfliktus |
| verzióellenőrzés | csak a várt előzményállapotból engedünk módosítani | ütközés felismerése, újrapróbálás |
| sorosítható izoláció | soros végrehajtással egyenértékű eredmény a rendszer szabályai szerint | szükség esetén teljes tranzakció újrafuttatása |
11 · Önellenőrzés
Önellenőrzés és tranzakciótervezé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. A tervezési feladatban kapcsolj össze egy tanulói nézetet, jogosultsági szabályokat és helyesen kezelt foglalási tranzakciót.
1. Mi a különbség egy alaptábla és egy hagyományos nézet között?
Az alaptábla önállóan tárolt üzleti adatokat tartalmaz; a hagyományos nézet tárolt lekérdezésdefinícióból származtatja eredményét. A nézet metaadatai tárolódnak, de az eredménysorok nem szükségképpen alkotnak külön fizikai másolatot.
2. A tanulói nézetből elhagyjuk a költséget. Ezzel biztosan megvédtük az adatot?
Nem. Ha a tanuló közvetlen vagy örökölt joggal olvashatja az alaptáblát, a nézet megkerülhető. A nézet végrehajtási szabályait és a teljes jogosultsági rendszert együtt kell ellenőrizni.
3. Mi választja ki az oszlopokat és mi a sorokat a tanulói nézetben?
A SELECT oszloplistája választja ki az attribútumokat, a WHERE allapot = publikus feltétel a sorokat. A két szűrés külön feladat.
4. Ki tervezi a MUHELY és JELENTKEZES kapcsolatát, és ki fejleszti a DBMS tranzakciókezelőjét?
Az első feladat az üzleti adatbázis tervezőjéé az érintettekkel együtt; a második az adatbázis-kezelő rendszer fejlesztőjéé. Egy konkrét séma és a sémát kezelő általános szoftver különböző tervezési szint.
5. Egy tanuló űrlapon jelentkezik SQL nélkül. Részt vesz az adatbázis használatában?
Igen. Előkészített alkalmazásműveletet használó végfelhasználó. Az SQL ismerete nem feltétele annak, hogy adatbázison alapuló tranzakciót kezdeményezzen.
6. Miért kell a szabad hely csökkentését és a jelentkezés rögzítését együtt kezelni?
Ha csak az egyik sikerül, a foglalások és helyek eltérhetnek. Egy tranzakcióban a két kapcsolódó módosítás együtt véglegesíthető vagy együtt elvethető.
7. A forrásból levontunk 7 darabot, de a cél módosítása hibás. Mit kell tennünk?
A teljes átvezetési tranzakciót visszavonjuk, így a végleges forrás 20, cél 5 marad. Nem véglegesítjük a sikeres első részműveletet külön.
8. Egy új ROLLBACK visszavon egy tegnap sikeresen véglegesített jelentkezést?
Nem. A ROLLBACK a folyamatban lévő tranzakció még nem véglegesített módosításait vonja vissza. Egy korábbi üzleti művelet helyesbítéséhez új, megfelelő kompenzáló művelet szükséges.
9. 18 helyből T1 négyet, T2 hatot foglal. Mindkettő 18-at olvas, végül T2 ír utoljára. Mi a hibás és helyes végérték?
Hibás: 12, mert T2 a régi 18-ból hatot von le, felülírva a 14-et. Helyes: 8. A különbség négy hely, T1 levonása elveszett.
10. Soros ütemezésnél T1 után milyen értéket olvas T2?
T1 véglegesített értékét, a 14-et. Ebből hatot levonva 8-at kap, nem a régi 18-ból számol újra.
11. Lehet egymásba fűzött végrehajtás helyes?
Igen. A tranzakciók lépései megfelelő konkurenciakezeléssel egymásba fűzhetők úgy, hogy a végrehajtás soros végrehajtással egyenértékű legyen. A puszta váltakozás nem azonos a hibával.
12. Miért nem bizonyítja az egyfelhasználós siker a párhuzamos helyességet?
Egy kapcsolatban nem feltétlenül jelenik meg a régi állapotot olvasó másik művelet. Legalább két kapcsolattal, különböző ütemezésekkel és hibás ágakkal is vizsgálni kell a műveletet.
13. A feltételes UPDATE nulla sort módosít. Jelenthetünk foglalási sikert?
Nem. Hiányzó műhely vagy elégtelen hely miatt is lehet nulla a sorszám. Az alkalmazás ellenőrzi az eredményt, és elutasítja/visszavonja a tranzakciót.
14. A COMMIT egyenlő a teljes adatbázis biztonsági mentésével?
Nem. A COMMIT véglegesít egy tranzakciót. A mentés és visszaállítás külön eljárás. A naplózás ehhez helyreállítási információt adhat, de nem helyettesít minden mentési feladatot.
Összetett feladat: műhelyjelentkezés megtervezése
Egy iskolai rendszerben a MUHELY rekord kapacitása 24, szabad helye 18. Négy és hat tanulóból álló csoport jelentkezne. A tanuló csak közzétett címet, időpontot és helyet láthat; a szervező belső költséget és kapcsolattartói adatot is kezel. A jelentkezésnek egyszerre kell a helyszámot és a jelentkezési rekordot karbantartania.
- Nevezd meg a tanulói nézet oszlopait és sorfeltételét.
- Sorold fel, milyen jogokat és megkerülési lehetőségeket kell ellenőrizni.
- Tervezd meg a sikeres és hibás tranzakcióágat; mi maradjon a végleges állapot, ha a jelentkezési rekord rögzítése nem sikerül?
- Számítsd ki a hibás és helyes kétfoglalásos eredményt; adj legalább két védekezési módszert.
- Írj három többfelhasználós vagy hibakezelési tesztesetet, elvárt eredménnyel.
Részletes mintamegoldás és indoklás
- Oszlopok: muhely_id, cim, kezdes, szabad_hely. Feltétel: allapot = publikus. A költség és felelős e-mail nem kerül a tanulói nézetbe. A tervezet sorokat a WHERE zárja ki.
- A tanuló a nézetet olvashatja; belső oszlopokat alaptáblán, más nézeten vagy örökölt jogon sem érhet el jogosulatlanul. A végrehajtási jogosultságot a használt DBMS-ben ellenőrizzük. A jelentkezést az alkalmazás ellenőrzött művelete végzi, nem korlátlan táblamódosítás.
- Ellenőrzés és védett helycsökkentés után jelentkezésrögzítés történik ugyanazon tranzakcióban. Mindkettő sikere esetén COMMIT. Rögzítési hibánál ROLLBACK: az adott sikertelen foglalás levonása nem marad meg. Másik már véglegesített tranzakció változását nem vonjuk vissza.
- Elavult értékek felülírásakor az utolsó T2 12-t ír, helyesen 8 marad. Védett sorhozzáférés, megfelelő feltételes atomi frissítés, verzióellenőrzés vagy sorosítható végrehajtás használható a konkrét rendszerben; az ütközési/újrapróbálási ágat is megtervezzük.
- 1. Két kapcsolat 4 és 6 helyet foglal: mindkettő sikere után 8 szabad hely és két érvényes jelentkezés. 2. A második módosítás szándékosan hibázik: az adott tranzakció nem hagy levont helyet. 3. Csak 3 hely van, 4-et kérünk: a foglalás elutasított, a helyszám 3, nincs új jelentkezés. Bónusz: kapcsolatvesztés a véglegesítés körül esetén a műveletazonosító alapján ellenőrizzük a kimenetelt az ismétlés előtt.
A fejezet végére külön tudod választani a nézetet a jogosultságtól, a COMMIT-ot a mentéstől, és meg tudod magyarázni az elveszett módosítás okát.