Tarcsi Ádám, ade@elte.hu Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, ade@elte.hu 2005. január
Miről lesz szó? Adatbáziskezelés SQL Oracle adatbázis-kezelő Belépés Tábla készítés - CREATE TABLE Lekérdezések - SELECT
Adatbázisok Adatkezelés kialakulása: szekvenciális fájlok kezelése Nehézkes: csak elemi műveletek Keresést meg kell írni, lassú Komplex adatok tárolása bonyolult Biztonság nincs: meghibásodás, hozzáférés-védelem Csak 1 ember dolgozhat rajta egyszerre
Adatbázis-kezelés alapja Adatmodellezés, elméleti háttér Adatbázis eszközök használata Szabványos adatdefiníciós és lekérdezőnyelv: SQL Az adatmodellezés célja, hogy a valós információk tárolására kitaláljunk valami olyasféle struktúrát, amiben az adatok információvesztés nélkül tárolhatók, az adatok közti kapcsolatok leírhatók és a struktúra a számítógépes feldolgozás szempontjából hatékony. A modelleinket többféle alapmodellre építhetjük. Mi csak a relációssal foglalkozunk, de manapság elterjedőben van néhány másfajta is, pl. objektum-orientált modell, félig strukturált adatmodell. A relációs modellben az adatokat táblákban tároljuk. A táblák között később kapcsolatokat építhetünk. A reláció tulajdonképpen egy táblázat! Táblák: attribútumok vagy oszlopok (egyedi név, típus) sorok vagy rekordok Példa:…
Elvárások Egy adatbázis-kezelő rendszerrel szemben a következő elvárásaink vannak: Adatbázis-létrehozások: séma, struktúra megadás speciális – adatdefiníciós nyelven Adatok lekérdezése, módosítása – lekérdező vagy adatmanipulációs nyelven Támogassa a nagy mennyiségű adatok hosszú időn keresztüli tárolását. Garantálja a biztonságot. Felügyelje a több felhasználó által egy időben történő adathozzáféréseket A felhasználó adatbázis-kezelőn keresztül éri el az adatokat. Egy adatbázis-kezelő rendszerrel szemben a következő elvárásaink vannak: Tegye lehetővé a felhasználók számára, hogy új adatbázisokat hozhassanak létre és azok sémáját, vagyis az adatok logikai struktúráját egy speciális nyelven adhassák meg. Ezt a speciális nyelvet adatdefiníciós nyelvnek nevezzük. Engedje meg a felhasználóknak, hogy az adatokat egy megfelelő nyelv segítségével lekérdezhessék és módosíthassák. Ezt a nyelvet szokás lekérdezőnyelvnek vagy adatmanipulációs nyelvnek nevezni. Támogassa nagyon nagy mennyiségű adat (gigabájtok vagy még több adat) hosszú időn keresztül való tárolását, garantálja az adatok biztonságát a meghibásodásokkal és az illetéktelen felhasználókkal szemben, és tegye lehetővé a hatékony adathozzáférést a lekérdezések és az adatbázis-módosítások számára. Felügyelje a több felhasználó által egy időben történő adathozzáféréseket úgy, hogy az egyes felhasználók műveletei ne legyenek hatással a többi felhasználóra és az egyidejű adathozzáférések ne vezethessenek az adatok hibássá vagy következetlenné válásához.
Adatbázis eszközök használata Oracle, MS SQL Server, IBM DB2, Informix, Sybase, MySQL, PostgresSQL, stb. Néhány fájlkezelő (amik NEM, vagy csak félig-meddig adatbázis-kezelők): dBase, Clipper, FoxPro, Access, … Kliens – Server kapcsolat. A kliensen dolgozik a felhasználó vagy közvetlen adatbázis-eléréssel (pl. SQL parancsokat ad ki), vagy egy olyan programmal, ahol a program tárolja az adatait adatbázisban (pl. a program SQL utasításokat tartalmaz).
SQL - Structured Query Language DDL (Data Definition Language – Adat Definiáló Nyelv) séma kezelő utasítások: adatbázisok, táblák létrehozása, módosítása és törlése pl.: CREATE, ALTER, DROP DML (Data Manipulation Language – Adat Manipuláló nyelv): adat kezelő utasítások: adatok rögzítése, módosítása, törlése és lekérdezése pl.: INSERT, UPDATE, DELETE, SELECT DCL (Data Control Language) GRANT, REVOKE, ABORT, COMMIT… Ekvivalens a relációs algebrával, , de számos olyan lényeges része is van, mely többet nyújt mint a relációs algebra, mint például az összesítések és az adatbázis-módosítások.
Oracle - Belépés ODBC: Start / Beállítások / Vezérlőpult / Felügyeleti eszközök / ODBC adatforrások Felhasználói DSN Kiszolgáló, felhasználói név, jelszó beállítása Ügyfél beállítása – Named pipe-ok Oracle Belépés: Jelszó:
SQL alapok: Adatbázisok létrehozása Adatbázisok adminisztrációja, felhasználók, felhasználói jogok Adattáblák létrehozása, módosítása, törlése: CREATE TABLE, ALTER TABLE, DROP TABLE Adattáblák feltöltése – INSERT INTO Adatok keresése – SELECT Adatok módosítása – UPDATE Adatok törlése - SELECT
Tábla létrehozás, eldobás CREATE TABLE tDiak (DAzon NUMBER, Nev VARCHAR(40), Kor INTEGER, TAzon NUMBER); Tábla eldobása: DROP TABLE tDiak;
Adattípusok – ORACLE Egészek Lebegőpontos számok Beíráskor ellenőrzés! NUMBER(p): előjellel együtt maximum p karakter széles egész szám. NUMBER(p,s): p: a teljes szám szélessége, s: a tizedesek száma (törtrész szélessége) NUMBER: szám, alapértelmezett mezőszélesség: 10 (INTEGER): NUMBER-ként kezeli (SQL Server adattípus) Lebegőpontos számok FLOAT Beíráskor ellenőrzés!
Adattípusok – ORACLE Karakteres típusok CHAR(hossz) - fix hosszú szöveg VARCHAR(n) - max. n hosszú szöveg VARCHAR2(n) - max. n hosszú szöveg. Ajánlott. RAW - nagy méretű szöveg, max 255 hosszú, nem csak szöveget tárolhat! Hosszabb szövegeket levágja!
Adattípusok – ORACLE Dátum típus: Egyéb típusok DATE: dátum és általában időpont is! i.e. 4712. jan. 01. és i.sz. 9999 .dec. 31. közé. Formázható! Egyéb típusok BLOB -bináris nagyméretű objektum, max. 4GB méretű adat tárolására (multimédia típus)
CREATE TABLE CREATE TABLE <név> (<oszlopnév1> <oszloptípus1>, <oszlopnév2> <oszloptípus2>, … , <oszlopnévn> <oszloptípusn> [CONSTRAINT <megszorításnév> …)]
Megszorítás - CONSTRAINT Elsődleges kulcs – PRIMARY KEY egyedi azonosító példa: tTanar táblában TAzon, tDiak tablaban DAzon szokásos elnevezés: pk_tablanev CONSTRAINT <megszorításnév> PRIMARY KEY (<mezőnév1>,…, <mezőnévk> )
CONSTRAINT 2. Idegen kulcs – FOREIGN KEY Másik táblában (hivatkozott tábla) elsődleges kulcsként előforduló értékeket vehet fel Nem törölhető olyan rekord, amelyre hivatkoznak. példa: tDiak táblában TAzon mező szokásos elnevezés: fk_hivatkozotablanev_hivatkozotttablanev (fk_tDiak_tTanar) CONSTRAINT <megszorításnév> FOREIGN KEY (<mezőnév1>,…, <mezőnévk> ) REFERENCES <hivatkozotttáblanév> (<újmezőnév1>,…, <újmezőnévk>)
CONSTRAINT 3. Egyediség - UNIQUE adott mezőben minden értéknek különbözőnek kell lennie szokásos elnevezés: uq_tablanev CONSTRAINT <megszorításnév> UNIQUE (<mezőnév1>,…, <mezőnévk>)
CONSTRAINT 4. Feltétel– CHECK Példa: Adott mező mely halmazból vehesse fel az értékeit szokásos elnevezés: ck_tablanev Sokféle feltétel: AND, OR, BETWEEN, SELECT, mezőnév>0, … I. CONSTRAINT <megszorításnév> CHECK (<mezőnév1> IN (<halmaz1>),…, <mezőnévk> IN (<halmazk>)) II. IN (<halmaz>) Példa: CONSTRAINT ck_tablanev CHECK (Nev IN('Pistike','Ferike')) CONSTRAINT ck_tablanev2 CHECK (Jegy IN(1,2,3,4,5))
Megszorítások 5. Alapértelmezett érték - DEFAULT Ha egy rekordnál az adott mező értékét nem adjuk meg, akkor az alapértelmezett értéket veszi fel értékként DEFAULT <érték vagy kifejezés>
Megszorítások 6. Nem nullérték - NOT NULL Lehetséges értelmezései Ismeretlen érték: pl.: nem ismerem a címét Alkalmazhatatlan érték: pl.: hajadon esetén a „Férj neve” mező kitöltése Visszatartott érték: nincs rá jogom, titkos adat esetén Elsődleges kulcs NOT NULL
Megszorítások 7. Azonosító A program automatikusan generál az adott mezőbe egy számot (meg lehet adni a kezdőértéket és a lépésszámot) IDENTITY (1,1)
Példa CREATE TABLE tTanar (TAzon INTEGER NOT NULL, Nev VARCHAR(50), CONSTRAINT pk_tTanar PRIMARY KEY (TAzon)) CREATE TABLE tDiak (DAzon INTEGER NOT NULL, Nev VARCHAR(50) NOT NULL, Kor INTEGER NOT NULL, TAzon INTEGER NOT NULL DEFAULT 1, CONSTRAINT pk_tDiak PRIMARY KEY (DAzon), CONSTRAINT fk_tDiak_tTanar FOREIGN KEY (TAzon) REFERENCES tTanar (TAzon), CONSTRAINT ck_tDiak CHECK (Kor BETWEEN 1 AND 100), CONSTRAINT uq_tDiak UNIQUE (Nev))
Megszorítások lekérdezése SELECT constraint_name, constraint_type FROM user_contraints WHERE table_name = ‘TÁBLANÉV’; SELECT constraint_name, column_name FROM user_cons_columns WHERE table_name = ‘TÁBLANÉV’;
Megszorítás módosítása Megszorítás hozzáadása: ALTER TABLE <tábla név> ADD CONSTRAINT <név> <típus> <(oszlop)>; Not null típusú megszorítás (mezőszintű): ALTER TABLE <tábla név> MODIFY <mezőnév> CONSTRAINT <típus> NOT NULL; Megszorítás törlése: ALTER TABLE <tábla név> DROP CONSTRAINT <megszorítás név>;