Relációs adatbázisok alapjai
A relációs adatbázisok táblákban tárolják az adatokat, ahol a táblák sorokból (rekordokból) és oszlopokból (mezőkből) állnak. A MySQL és MariaDB a leggyakrabban használt rendszerek.
Fontos fogalmak
- Elsődleges kulcs (PK): Egyedi azonosító minden sorhoz
- Idegen kulcs (FK): Más tábla PK-jára mutató hivatkozás
- Index: Gyorsítja a keresést az adatbázisban
- Tranzakció: ACID tulajdonságú adatmódosítás
SQL parancsok
Tábla létrehozása
SQL · CREATE TABLECREATE TABLE diakok ( id INT AUTO_INCREMENT PRIMARY KEY, nev VARCHAR(100) NOT NULL, szuletesi DATE, osztalyid INT, FOREIGN KEY (osztalyid) REFERENCES osztalyok(id) );
Adatok lekérdezése
SQL · SELECT – egyszerű, JOIN, aggregáció-- Egyszerű lekérdezés SELECT nev, szuletesi FROM diakok WHERE id = 1; -- JOIN – táblák összekapcsolása SELECT d.nev, o.nev AS osztaly FROM diakok d JOIN osztalyok o ON d.osztalyid = o.id WHERE o.nev = '12A' ORDER BY d.nev ASC; -- Aggregáció – csoportosítás és szűrés SELECT osztalyid, COUNT(*) AS letszam FROM diakok GROUP BY osztalyid HAVING COUNT(*) > 20;
Adatok módosítása
SQL · INSERT · UPDATE · DELETE-- Beszúrás INSERT INTO diakok (nev, szuletesi, osztalyid) VALUES ('Kovács Péter', '2005-03-15', 3); -- Frissítés UPDATE diakok SET osztalyid = 4 WHERE id = 7; -- Törlés DELETE FROM diakok WHERE id = 12;
Normalizálás
Az adatbázis normalizálás célja az adatredundancia csökkentése és az adatintegritás javítása. A folyamat során az adatokat egyre szigorúbb normálformákba rendezzük.
| Normálforma | Követelmény |
|---|---|
| 1NF | Minden oszlop atomi (oszthatatlan) értékeket tartalmaz |
| 2NF | 1NF + minden nem kulcs attribútum teljes mértékben függ a PK-tól |
| 3NF | 2NF + nincs tranzitív függőség nem kulcs attribútumok között |
| BCNF | 3NF + minden determinánsa kulcs |
Projektfeladat
A projektfeladatot a Microsoft Access alkalmazásban hoztam létre. Két táblát készítettem:
Az első tábla a játékinfo nevet kapta – ebbe kitalált játékoknak az adatait jegyeztem fel, mint például a játék neve, megjelenési éve, ára stb.
A második tábla a cég nevet kapta – ebbe a játékokhoz tartozó kitalált cégeket és a hozzájuk tartozó adatokat rögzítettem, mint például melyik országban helyezkedik el, és hogy melyik évben alapították.
A két tábla segítségével hoztam létre a különböző lekérdezéseket.
Táblák
Játékinfó
| Mező neve | Adattípus |
|---|---|
| JátékID | Szám |
| Játék Neve | Rövid szöveg |
| Műfaj | Rövid szöveg |
| Platform | Rövid szöveg |
| Értékelés | Szám |
| Megjelenési Év | Szám |
| Játék Ár | Szám |
| Pegi 18 | Igen/Nem |
| Eladások | Szám |
Cég
| Mező neve | Adattípus |
|---|---|
| ID | Szám |
| Fejlesztő | Rövid szöveg |
| Ország | Rövid szöveg |
| Alapítási év | Szám |
A táblák közötti kapcsolat
Lekérdezések
Lekérdezés 1
SELECT TOP 1 Játékinfo.[Játék Neve], Játékinfo.[Játék Ár]
FROM Játékinfo
ORDER BY Játékinfo.[Játék Ár] DESC;
Lekérdezés 2
SELECT Játékinfo.[Játék Neve], Játékinfo.Műfaj, Játékinfo.Platform, Játékinfo.[Játék Ár]
FROM Játékinfo
WHERE (((Játékinfo.[Játék Ár]) Between 44 And 90));
Lekérdezés 3
SELECT Játékinfo.[Játék Neve], Játékinfo.[Pegi 18]
FROM Játékinfo
WHERE (((Játékinfo.[Pegi 18])=True));
Lekérdezés 4
SELECT Cég.Fejlesztő, Cég.Ország, Cég.[Alapítási év]
FROM Cég
GROUP BY Cég.Fejlesztő, Cég.Ország, Cég.[Alapítási év]
HAVING (((Cég.Fejlesztő) Like "*b*"));
Lekérdezés 5
SELECT Cég.Fejlesztő, Count(Játékinfo.JátékID) AS CountOfJátékID
FROM Cég INNER JOIN Játékinfo ON Cég.ID = Játékinfo.JátékID
GROUP BY Cég.Fejlesztő;
Lekérdezés 6
SELECT TOP 1 Cég.Fejlesztő, Sum([Játék Ár]*[Eladások]) AS Bevétel
FROM Cég INNER JOIN Játékinfo ON Cég.ID = Játékinfo.JátékID
GROUP BY Cég.Fejlesztő
ORDER BY Sum([Játék Ár]*[Eladások]) DESC;
Lekérdezés 7
SELECT Cég.Fejlesztő, Játékinfo.[Játék Neve], Játékinfo.Platform, Játékinfo.[Megjelenési Év], Játékinfo.Értékelés
FROM Cég INNER JOIN Játékinfo ON Cég.ID = Játékinfo.JátékID
WHERE (((Játékinfo.Platform) Like "*Nintendo*") AND ((Játékinfo.[Megjelenési Év])>2023) AND ((Játékinfo.Értékelés)>4))
ORDER BY Játékinfo.Értékelés DESC;