SQL alapok: Relációs adatbázis-tervezés és tiszta lekérdezések
Az adatok strukturált és megbízható tárolása minden komoly szerveroldali alkalmazás alapja. Bár manapság nagyon népszerűek a NoSQL megoldások, az esetek túlnyomó többségében az SQL (Structured Query Language), és a rá épülő relációs adatbázis-kezelő rendszerek (RDBMS) – mint amilyen a MySQL, PostgreSQL, Oracle vagy az SQL Server – jelentik a legjobb és legbiztonságosabb választást.
A relációs modellek lényege, hogy az adatokat szigorú sémával (schema) rendelkező, oszlopokból és sorokból álló táblákban (tables) tároljuk. A legfőbb erősségük azonban a táblák közötti kapcsolatok (relációk) logikus kezelése.
Elsődleges és Idegen kulcsok (Keys)
A táblák közötti kapcsolatok felépítésének alappillérei a kulcsok:
- Primary Key (Elsődleges kulcs): Egy tábla minden sorának kötelezően rendelkeznie kell egy egyedi azonosítóval. Ez garantálja, hogy soha nincs két teljesen egyforma sor. Leggyakrabban egy automatikusan növekvő számot (
id), vagy egy globálisan egyedi azonosítót (UUID) használunk. - Foreign Key (Idegen kulcs): Ez az a mező, ami a "relációt" megteremti. Egy másik tábla elsődleges kulcsára mutat. Például a
cikkektáblában lévőszerzo_idoszlop afelhasznaloktáblaidoszlopára mutat, így tudjuk, ki írta a cikket.
Gyakorlati SQL parancsok: A DDL és DML alapok
Az SQL nyelvet feloszthatjuk DDL-re (Data Definition Language - az adatbázis struktúráját definiálja) és DML-re (Data Manipulation Language - az adatokat kezeli).
-- 1. DDL: Tábla létrehozása
CREATE TABLE felhasznalok (
id INT AUTO_INCREMENT PRIMARY KEY,
nev VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
reg_datum TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE cikkek (
id INT AUTO_INCREMENT PRIMARY KEY,
cim VARCHAR(255) NOT NULL,
tartalom TEXT,
szerzo_id INT,
statusz VARCHAR(20) DEFAULT 'vázlat',
-- Idegen kulcs beállítása
FOREIGN KEY (szerzo_id) REFERENCES felhasznalok(id) ON DELETE CASCADE
);
-- 2. DML: Adatok beszúrása (INSERT)
INSERT INTO felhasznalok (nev, email)
VALUES ('Kovács Péter', 'peter@simplesolution.ro');
INSERT INTO cikkek (cim, tartalom, szerzo_id, statusz)
VALUES ('SQL Alapok', 'Ez egy hosszú szöveg...', 1, 'publikalt');
-- 3. DML: Összetett lekérdezés összekapcsolással (INNER JOIN)
SELECT cikkek.cim, felhasznalok.nev AS szerzo_neve, cikkek.statusz
FROM cikkek
INNER JOIN felhasznalok ON cikkek.szerzo_id = felhasznalok.id
WHERE cikkek.statusz = 'publikalt'
ORDER BY cikkek.id DESC;
Az ON DELETE CASCADE fontossága
A fenti példában szereplő ON DELETE CASCADE szabály gondoskodik a referenciális integritásról. Ez azt jelenti, hogy ha törlünk egy felhasználót (pl. Pétert) a felhasznalok táblából, a rendszer automatikusan törli az összes hozzá tartozó cikket a cikkek táblából is, elkerülve az úgynevezett "árva rekordok" (orphan records) kialakulását.
Összegzés
Az SQL nyelv megértése nélkülözhetetlen egy backend fejlesztő számára. Egy jól megtervezett, normalizált (adatduplikációt kerülő) adatbázis-struktúra nemcsak a tárhellyel spórol, de a lekérdezéseket is villámgyorssá teszi, és garantálja az adatok üzleti konzisztenciáját (pl. hogy ne lehessen két felhasználó ugyanazzal az e-mail címmel).
Gyakran Ismételt Kérdések (GYIK)
Mi az a normalizálás (Normalization)?
A normalizálás egy folyamat az adatbázis tervezésekor, aminek a fő célja az adatduplikáció megszüntetése. Ha egy adatot módosítani kell (pl. egy kategória nevét), azt csak egyetlen helyen kelljen átírni, ne több száz cikkben külön-külön.