Webfejlesztés 4. alkalom Adatbázis kezelés, SQL alapismeretek, MySQL és a PHPMyAdmin használata
Adatbázis kezelési alapok Az adatbázisok alapvetően adatkiszolgálást, illetve különböző szűréi, szeparálási lehetőséget biztosítanak a felhasználók számára Sokféle adatbázis típus, illetve koncepció létezett, létezik, de manapság a leghatékonyabb, a relációs adatmodell illetve az ehhez kapcsolódó, relációs adatbázis a legelterjedtebb és széle körben használatos
A Relációs adatmodell I. A relációs adatmodell elterjedését, a felépítésének köszönheti, mely egy egyszerű, ámbár nagyon jól használható szerkezet. Alap fogalmak: Adatbázis Egy kategóriába tartozó, illetve egyazon adathalmazhoz tartozó táblák összessége. Tábla Relációs formában tárolt rekordok összessége. Rekord Egy a relációnak eleget tevő bejegyzés a táblában. Tulajdonság Azon adatok összessége, melyekből a rekord áll. Ezek alkotják a tábla szerkezetét. Kulcs A rekordot pontosan meghatározó elem pl.: Embernél a személyi szám
További fontos fogalmak Kapcsolat Két tábla valamelyik kulcsa alapján létrehozott egybefüggés, mely azt jelzi, hogy a két tábla valamilyen relációban áll egymással Szűrők Olyan speciális beállítások, melyekkel elérhető, hogy csak az adott kritériumnak eleget tevő rekordokat lássuk a táblából. Pl.: csak a kutyákat lássuk az állítok táblából Index Olyan jelzés, mellyel biztosíthatunk egy adat gyors elérést, ha arra sűrűn és gyorsan van szükségünk Ekkor a rendszer automatikusan a memóriába tölti az adatot, így azt gyorsan ki tudja nekünk szolgálni. Roll Back Visszapörgetés, az adatbázis visszaállítása egy bizonyos esemény hibás lefutása esetén. Banki rendszerek
Relációs adatmodell szerkezet III. Adatbázis Tábla Tulajdonság Tulajdonság Tulajdonság Tulajdonság Tulajdonság Tábla Tulajdonság Tulajdonság Tulajdonság Tábla Tulajdonság Tulajdonság
Relációs tábla szerkezete: Az alábbi szerkezet tartozhat például egy személyek táblához: Azonosító Név Kor Város 123456JA Gipsz Jakab 45 Budapest 321654EW Major Anna 21 Miskolc
Adatbázis tervezés folyamata 1. Feladat meghatározása 1. Milyen feladatokra fog kelleni az adatbázis 2. Szükséges táblák meghatározása 1. Szükséges adatmezők meghatározása 1. Az egyes adatmezők megszabása, melyek biztosan kelleni fognak a táblában és azok méretének megszabása 2. Kulcsok meghatározása, mely egyedileg azonosítja a rekordot 3. Normalizálás, az optimalizált teljesítményért 3. Létrehozás
Normalizálás Normalizálás alatt azt értjük, hogy az adott adatbázist teljesítmény optimalizáljuk, melynek pontos lépései vannak. Ezek a normálformák, melyek olyan ajánlott optimalizálási műveleteket tartalmaznak, mellyel könnyebben kezelhetővé és gyorsabbá tehetjük az adatbázis lekérdezését. Fontos ez? Lásd Facebook!
1. Normálforma Az elsődleges, egyedi kulcsok létrehozása. Az egyes rekordok minden tulajdonságában egy attribútum szerepeljen. Azonosító Név Tevékenység 1 Gipsz Jakab Festő, Kőműves 1. Normálformára hozás után: Azonosító Név Tevékenység 1 Gipsz Jakab Festő 2 Gipsz Jakab Kőműves
2. Normálforma Ez a normálforma csak akkor érvényes, ha több mező, tulajdonság alkotja a kulcsot. Ekkor olyan mező nem szerepelhet a táblában ami csak az egyik kulcstól függ: Azonosító Név Névnap 1 Gipsz Jakab Május 1. 2. Normálformára hozás után: Azonosító Név 1 Gipsz Jakab
3. Normálforma Minden a táblában lévő elem teljesen függ a kulcstól, még akkor is ha abból több is van, vagy csak 1 ezzel biztosítva, hogy az egyes rekordok pontosan meghatározhatók a kulcs kiválasztásával. Így a kulcs azonosítja a továbbiakban a rekordot.
Adatbázis használata I. Az SQL
Az SQL Standard Query Language Olyan szabvány nyelv, melynek segítségével könnyen, és szabványosan kezelhetjük az adatbázist. Az SQL alapú adatbázisok, csak kis mértékben térnek el egymástól, így könnyen át kódolható egy meglévő kód, másik nyelvre.
SQL alapok Az SQL nyelvben használatos alap parancsok: CREATE USE SELECT INSERT UPDATE DELETE DROP TRUNCATE
CREATE parancs A CREATE prancsot létrehozásra használjuk: CREATE DATABASE [adatbázisnév]; CREATE TABLE [táblanév] ([mezőnév] [típus], [mezőnév] [típus],,primary KEY [mezőnév], UNIQUE KEY [mezőnév]); Mint láthatjuk, mind adatbázist, mind pedig táblát ezzel a paranccsal hozunk létre. A táblánál kötelezően fel kell sorolni a rekord tulajdonságokat is.
USE parancs A USE parancs adja meg, hogy melyik adatbázist szeretnénk kezelni. USE [adatbázisnév]; A USE használata nem kötelező a legtöbb SQL alapú nyelvben, azonban ha nincs megadva melyik adatbázissal dolgozunk, minden lekérdezésben meg kell adni a tábla elérését.
SELECT parancs A SELECT parancs a lekérdezésre szolgál, mellyel kérhetünk adatokat az adatbázisból. SELECT [tulajdonságok amik kellenek] FROM [táblanév]; A tulajdonságokat vesszővel tagolva kell felsorolni, ha minden tulajdonságra szükségünk van, akkor * jelet kell rakni a helyére.
INSERT parancs Az INSERT parancs rekord beszúrásra szolgál. INSERT INTO [táblanév] ([tulajdonságok, amiket meg fogunk adni]) VALUES ([az értékek, abban a sorrendben ahogy felsoroltuk]); Csak úgy mint a SELECT esetében, minden tulajdonság típust vesszővel választunk el, az értékeket is
UPDATE parancs Az UPDATE egy vagy több meglévő rekordot frissít az adatbázisban. UPDATE [táblanév] SET([tul.név]=[újérték],[tul.név]=[újérték] ); Ez a szintaxis az összes rekordnak ami a táblában van az adott tulajdonságoknál új értéket ad.
DELETE parancs A DELETE parancs rekord törlésére van DELETE FROM [táblanév] WHERE [tul.név]=[érték]; Az adott feltételnek eleget tevő rekordokat törli
DROP parancs A DROP parancs tábla illetve adatbázis törlését valósítja meg. DROP DATABASE [adatbázisnév]; DROP TABLE [táblanév];
TRUNCATE parancs A TRUNCATE parancs kiűriti a táblát amit megadunk neki, és mindet alaphelyzetbe állít. TRUNCATE TABLE [táblanév];
Adatbázis használata II. Szűrők
Az adatbázis kezelése Az előzőekben tanult parancsok semmilyen szűrési lehetőségre nem adnak lehetőséget, habár az adatbázis lényege, hogy csak azt/azokat az adatokat érjük el, módosítsuk, írjuk be, amelyik nekünk szükséges, és így nem kell külön odafigyelni a többi adatra. Az ilyen feladatokra használunk szűrőket.
Alapvető kisegítő parancsok, szűrők SET WHERE ORDER BY GROUP BY HAVING LIMIT VALUES JOIN
A SET parancs A SET az angol nevéből jól ismert beállítást takarja, és az UPDATE parancsnál fogjuk használni. Pl.: UPDATE [táblanév] SET [tul.név]=[újérték];
A WHERE parancs A WHERE azt adja meg, hogy melyik értékekre alkalmazzunk egy bizonyos parancsot. Pl.: SELECT * FROM [táblanév] WHERE [tul.név]=[érték]; Pl.: UPDATE [táblanév] SET [tul.név]=[újérték] WHERE [tul.név]=[érték]; Egyszóval kiszűri azokat az elemeket a táblából ami számunka szükséges, és csak ezekre lesz alkalmazva a konkrét parancs.
Az ORDER parancs Az ORDER parancsot sorba rendezésre használjuk. Összetevői: BY [tul.név]: kijelöli a tulajdonságot ami alapján sorba kell rendezni az értékeket ASC/DESC: A-tól Z-ig vagy Z-től A-ig való sorbarendezést adja meg Tehát pl.: SELECT * FROM [táblanév] ORDER BY [tul.név] DESC
A GROUP parancs A GROUP parancs sorba szervezésre szolgál, ami azt jelenti, hogy, egy adott tulajdonság alapján sorba rendezi a sorozatot, de úgy, hogy a tulajdonság csak egyszer szerepel, és az elemek alatta helyezkednek el. Pl.: SELECT * FROM [táblanév] GROUP BY [tul.név]; PHP-ban nem jellemző a használata, mivel a feldolgozáskor mi tudjuk szűrni az adatokat.
A HAVING parancs A HAVING célja ugyan az mint a WHERE parancsnak, azonban kitüntetett különbség van a kettő között. A HAVING csak a GROUP BY után állhat a WHERE pedig csak a GROUP BY előtt. Pl.: SELECT * FROM [táblanév] WHERE [tul.név]=[érték] GROUP BY [tul.név] HAVING [tul.név]=[érték];
A LIMIT parancs A LIMIT, ahogy a neve is takarja limitálja a kimentet, így azt csak SELECT esetén használjuk. Pl.: SELECT * FROM [táblanév] LIMIT 1 Ekkor mindössze egy elem fog visszajönni válaszul még akkor is, ha éppen 50 rekord van a táblában.
A VALUES parancs Az INSERT parancs alá tartozik, feladata, hogy a felsorolt tulajdonság nevek mellé szolgáltassa az értékeket is. Pl.: INSERT INTO [táblanév] ([tulajdonságok]) VALUES ([értékek, ugyan abban a sorrenben ahogy a tulajdonságok vannak]);
A JOIN parancs A JOIN két vagy több táblát meglévő értékeik alapján tud összekapcsolni, így azokat egybe lehet használni. Típusai: LEFT JOIN: Ekkor a baloldali táblához kapcsolja a jobb oldali tábla adatait. RIGHT JOIN: Ekkor pontosan fordítva jár el CROSS JOIN: Mind a két táblát összekapcsolja a másik elemével Pl.: SELECT * FROM [táblanév1] LEFT JOIN [táblanév2] ON ([táblanév1].[tul.név]=[táblanév2].[tul.név]);
A sorrend is fontos! Az SQL szintaxisnak az alábbi sorrend felel meg: Kiolvasásnál: SELECT [tul.név] FROM [táblanév] WHERE [feltétel] GROUP BY [tul.név] HAVING [feltétel] ORDER BY [tul.név] LIMIT [mennyi]; Beírásnál: INSERT INTO [táblanév] ([tulajdonságok]) VALUES ([értékek]); Frissítésnél: UPDATE [táblanév] SET [tul.név]=[újérték] WHERE [tul.név]=[érték];
Operátorok Természetesen csak úgy mint a PHP-ban egy szűrő, feltétel itt is lehet többrétű. Itt az angol elnevezések a fontosak, így itt: És kapcsolat: AND Vagy kapcsolat: OR Kizáró vagy: XOR Érvényesek.
Típusok Az adatbázisban alapvetően az alábbi típusokat használjuk legtöbbször: INT([hossz]) Integer, egész szám a hossza a karakter hosszát jelöli VARCHAR([hossz]) Bármilyen karakterhalmaz a hossza a karakterhossz TEXT Szöveg, mérete korlátlan ENUM Választás, két vagy több opció között BOOL Logikai érték DATE Dátum MySQL formátum: ÉÉÉÉ-HH-NN DATETIME Dátum+idő ÉÉÉÉ-HH-NN ÓÓ:PP:MM DATETIMESTAMP az aktuális dátum+idő
Markerek AUTO INCREMENT Automata növelés, akkor érdekes, mikor az id egy szám és az azonosítja az egész rekordot, így az mindig egyedi kulcs lesz. NULL/NOT NULL Az érték lehet nulla vagy nem lehet nulla, ez akkor érdekes, amikor a NULL operátort használjuk egy érték kinullázására Default Alapértelmezett érték, ha nem adja meg a felhasználó Index Az indexelt tulajdonság mindig a memóriában van, hogy könnyen hozzáférhető legyen.
Ennyi volna? Nos nem, az SQL ennél sokkal kiterjedtebb nyelv. Bonyolultsága felér, akár egy rendes programozási nyelvel, mint pl.: PHP, így ezt csak mint kisegítőt fogjuk használni. Bonyolultságát jól tükrözi, hogy a komolyabb weboldalaknál, cégeknél, már külön adatbázis rendszergazdák végzik a karbantartását, kezelését. További referencia leírások: http://dev.mysql.com/doc/
MySQL a PHP-ban Parancsok, elérés, PHPMyAdmin
MySQL a PHP-ban A PHP-nak a fő adatbázis kiszolgálója a MySQL, így a kezelése a relatív egyszerűbbnek mondható. Fontos, hogy a MySQL ebben az esetben egy külön program, amit el kell érjünk, így annak megfelelően telepítve kell legyen a gépünkön, ha ez nem történt meg, a PHP képtelen lesz elérni azt.
A PHPMyAdmin A PHPMyAdmin a MySQL szerver egyik legkedveltebb adatbázis szerkesztője, mely weben keresztül kényelmesen elérhető. Használata egyszerű, mivel grafikus felületen keresztül engedi szerkeszteni, létrehozni a táblákat, és azokban esetleges adatokat elhelyezni, törölni, stb.
Adatbázis kezelő funkciók I. Mysql_connect( hely, név, jelszó ); Csatlakozik az adatbázis szerverhez. Mysql_select_db( adatbázisnév ); Kiválasztja az adatbázist. Ritkán használjuk! Mysql_query( parancs ); SQL szintaxist ad át a MySQL-nek mely lefuttatja azt. Mysql_num_rows(visszatérési érték) Megadja, hogy hány rekordot adott vissza a szerver.
Adatbázis kezelő funkciók II. Mysql_fetch_array(visszatérési érték) Szétválogatja a MySQL által visszaadott adatokat tömbösítve. Mysql_fetch_assoc(visszatérési érték) Szétválogatja a MySQL által visszaadott adatokat asszociatív tömbösítve. Mysql_close(kapcsolat) Lezárja a MySQL kapcsolatot.
Feladat I. Az előző órákon megírt bejelentkezést írjuk át adatbázis alapúra! A regisztrációt is igazítsuk hozzá! A tábla szerkezete: Name VARCHAR(64) Password VARCHAR(64) (SHA1-ben titkosítva)
Feladat II. Vendégkönyv készítése az előzőek alapján. A tábla szerkezete a következő: Name VARCHAR(64); IP VARCHAR(15); Quality INT(1); Comment TEXT; *Az értékelésnek megfelelő csillag jelenjen meg az oldalon, tehát mondjuk 5-ös értékelés esetén 5 csillag