Podatki in podatkovne baze
Ta domena preverja razumevanje relacijskega modela, načrtovanja tabel in poizvedovanja v SQL. Naloge pogosto združujejo branje sheme, pisanje poizvedbe in presojo, ali so podatki skladni z integritetnimi omejitvami.
Model in integriteta
- Entiteta → tabela, atribut → stolpec, vrstica → zapis; relacije 1:1, 1:N in M:N (slednja potrebuje povezovalno tabelo).
- Primarni ključ enolično določa vrstico; tuji ključ se sklicuje na primarni ključ druge tabele in uveljavlja referenčno integriteto; domenska omejitev določa dovoljene vrednosti.
- Normalizacija: 1NF zahteva atomarne vrednosti, 2NF brez delne odvisnosti od dela sestavljenega ključa, 3NF brez tranzitivnih odvisnosti.
SQL
- DDL: CREATE/ALTER/DROP; DML: INSERT/UPDATE/DELETE; poizvedba SELECT.
- Logični vrstni red: FROM → WHERE (filtrira vrstice) → GROUP BY → HAVING (filtrira skupine) → SELECT → ORDER BY.
- NULL ni enak nič; primerjava zahteva IS NULL; COUNT(*) šteje vrstice, COUNT(stolpec) preskoči NULL.
Rešen primer
Tabeli Oddelek(id, naziv) in Student(id, ime, oddelek_id). Želimo oddelke z več kot dvema študentoma:
SELECT o.naziv, COUNT(*) AS st
FROM Oddelek o JOIN Student s ON s.oddelek_id = o.id
GROUP BY o.naziv
HAVING COUNT(*) > 2;
Sklep: JOIN poveže vrstice, GROUP BY tvori skupine po oddelku, COUNT šteje študente v skupini, HAVING izloči premajhne skupine. Če bi pogoj zapisali v WHERE, bi filtrirali posamezne vrstice pred združevanjem in dobili napačen rezultat.
Pasti
- WHERE namesto HAVING;
- pozabljen GROUP BY;
- COUNT(*) namesto COUNT(stolpec);
- NULL = NULL;
- DELETE izbriše vrstice, DROP izbriše tabelo;
- M:N brez povezovalne tabele;
- stolpci v SELECT, ki niso v GROUP BY.