SQL Structured Query Language Komplett adatbziskezel nyelv DDL

SQL Structured Query Language Komplett adatbáziskezelő nyelv • DDL (Data Definition Language = Adat Definíciós Nyelv) • DML (Data Manipulation Language = Adat Manipulációs Nyelv) • DQL (Data Query Language = Adat Lekérdező Nyelv) • DCL (Data Control Language = Adatelérést Vezérlő Nyelv)

Az SQL tulajdonságai • szabványos (SQL'86, SQL'89, SQL'92, …), elterjedt nyelv, a legtöbb elterjedt adatbázis kezelő rendszer támogatja • relációkon végez műveleteket (relációs algebra) • nem algoritmikus, deklaratív nyelv • nem rekurzív (SQL’ 99)

Az SQL felhasználása • interaktív parancsértelmező segítségével • grafikus adatbázis kezelő környezetbe ágyazva • programozási nyelvbe ágyazva

Az SQL szintaktikájának jellemzői • utasításokból áll, végét pontosvessző zárja • az utasítások záradékokból állnak, amelyek sorrendje kötött • az utasítások tartalma: alapszavak, azonosítók, kifejezések, konstansok, listák, elválasztó jelek

Adatbázis tervezés és megvalósítás lépései 1. Fogalmi tervezés: milyen egyedekkel foglalkozunk, egyedhalmazok tulajdonságai, kapcsolatok megtervezése, Egyed-Kapcsolat modell, EK diagram készítése 2. Logikai tervezés: adatmodell, logikai séma meghatározása, (az EK diagramot leképezzük relációs modellre) 3. Fizikai tervezés: konkrét adatbázis meghatározása (Oracle, MSSQL, Mysql stb…) -> fizikai séma 4. Adatbázis létrehozása: scriptek, utasítások futtatása a logikai séma megvalósítására, majd feltöltése tesztadatokkal, majd éles adatokkal üzembe helyezés

Modellezési alapfogalmak Egyed: „önállóan” létező dolog (pl: autó, egyetem, …) Egyed előfordulása: egy konkrét értéke (LEN 120 rendszámú , ELTE) Egyedhalmaz: az egyed előfordulásainak összessége Tulajdonság: amivel az egyedeket jellemezzük (név, testmagasság, …) § Azonosító, egyértékű- többértékű, egyszerű-összetett, származtatott • Kapcsolat: az egyedek között fennálló viszony § nincs kapcsolat, 1: 1 (ember-neme), 1: N (anya-gyerek), N: M (diák -tantárgy) § kötelező - nem kötelező § kettő vagy több egyedhalmaz között • •

Kulcs Tulajdonság, amely értékei egyértelműen azonosítják a relációt. kulcsok fajtái: • egyszerű kulcs • összetett kulcs: több attribútum alkotja • minimál kulcs: összetett kulcs esetén bármelyik attribútumot vesszük el belőle, akkor már nem kulcs a legkisebb részhalmaz, ami még azonosít • kulcsjelöltek: minimális kulcsok közül választhatunk • elsődleges kulcs: a kulcsjelöltek közül kiválasztott kulcs • alternatív kulcsok: a kulcsjelöltekből nem elsődleges kulcsként kiválasztott elemek • idegen kulcs: olyan tulajdonság, amelyik egy másik relációban elsődleges kulcsként szerepel hivatkozott reláció: • amelynek elsődleges kulcsára hivatkozunk • hivatkozott táblából nem törölhetek sort, ha a hivatkozó táblában szerepel • nem vehetek fel új idegen kulcsot a hivatkozó táblába, ha a hivatkozottban nem szerepel • hivatkozott táblában módosítás: törlés + bevitel, CASCADE • hivatkozási integritási szabály: az adatbázisban nem lehet olyan idegen kulcs, melynek értéke ne egyezik meg egy hozzá kapcsolódó elsődleges kulcs értékével

Funkcionális függőség • funkcionális függőség: egy adott R reláció Y tulajdonsága funkcionálisan függ az R reláció X tulajdonságától ha X minden értéke egyértelműen meghatározza Y értékét • funkcionális teljes függőség: legyen X összetett tulajdonság, Y tulajdonság funkcionálisan teljesen függ X-től, ha funkcionálisan függ X-től, de nem függ X egyetlen résztulajdonságától sem • tranzitív függőség: R reláció Z tulajdonsága tranzitíven függ X relációtól, ha Z funkcionálisan függ Y-tól, és Y funkcionálisan függ X-től X->Y->Z

Normálformák • 1. NF: ha a relációban minden érték elemi • 2. NF: § ha 1. NF § és minden olyan tulajdonsága, amely nem része az elsődleges kulcsnak, funkcionálisan teljesen függ az elsődleges kulcstól (Megszünteti az összetett kulcstól való részleges függésből adódó redundanciát. Ha egy tábla 1 NF és egyszerű kulcsa van, akkor biztosan 2 NF is. ) • 3. NF: § ha 2. NF § és minden olyan tulajdonsága, amely nem része az elsődleges kulcsnak és funkcionálisan teljesen függ az elsődleges kulcstól, és csak attól (A reláció nem tartalmaz tranzitív függőséget. ) (Ha egy tábla 2 NF és a nem kulcs tulajdonságok között nincs függőség, akkor 3 NF is. )

Példa adatbázisunk Szeretnénk nyilvántartani a diákok adatait, különböző tantárgyak témaköreiből szerzett különböző típusú osztályzataikat. Diákok adatai: név, születési dátum, anyja neve, neme, haja színe. A tantárgyakról és témaköreikről csak a megnevezésüket tároljuk. A diákok jegyeiről tároljuk, hogy melyik tantárgynak melyik témaköréből kapta, milyen típusú (témazáró, felelés, dolgozat, házi feladat, …) és mikor kapta.

Modellezzünk N Diák M 1 1 N 1 N N 1 Típus 1 NN Jegy N Tantárgy 1 Témakör

A modell leképezése relációs sémába
![Táblák létrehozása CREATE TABLE táblanév ( mezőnév 1 adattípus (szélesség) [mező szintű megszorítás 1] Táblák létrehozása CREATE TABLE táblanév ( mezőnév 1 adattípus (szélesség) [mező szintű megszorítás 1]](http://slidetodoc.com/presentation_image/3f5723d30221a80f39bc248e5cf53a21/image-13.jpg)
Táblák létrehozása CREATE TABLE táblanév ( mezőnév 1 adattípus (szélesség) [mező szintű megszorítás 1] mezőnév 2 adattípus (szélesség) [mező szintű megszorítás 2], . . . mezőnév. N adattípus (szélesség) [mező szintű megszorítás. N], [táblaszintű megszorítás 1], [táblaszintű megszorítás 2], . . . [táblaszintű megszorítás. M ) Mező szintű (névtelen) megszorítások: • Kötelező tartalom előírása: IS [NOT] NULL • Egymezős kulcsok: § elsődleges_kulcs típus… PRIMARY KEY § Idegen_kulcs típus… REFERENCES hivatkozott_tábla (hivatkozott_kulcs) • Egyedi mező: mezőnév típus … UNIQUE Táblaszintű (nevesített) megszorítások: • Többmezős kulcsok: • CONSTRAINT constraint_név PRIMARY KEY (mező, mező 2, …) • CONSTRAINT constraint_név FOREIGN KEY (mező 1, mező 2, …) REFERENCES hivatkozott_tábla (mező 1, mező 2, …),

CONSTRAINT záradék (Access) CONSTRAINT név {PRIMARY KEY (elsődleges 1[, elsődleges 2 [, . . . ]]) | UNIQUE (egyedi 1[, egyedi 2 [, . . . ]]) | NOT NULL (nemnull 1[, nemnull 2 [, . . . ]]) | FOREIGN KEY [NO INDEX] (hivatkozás 1[, hivatkozás 2 [, . . . ]]) REFERENCES idegen tábla [(idegen mező 1 [, idegen mező 2 [, . . . ]])] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]}

Példa adatbázisunk sémájának a létrehozása CREATE TABLE diak ( diak_id counter not null PRIMARY KEY, nev varchar(50) not null, szulido datetime not null, anyja varchar(50) not null, neme char(1) not null, haja varchar(50) null, CONSTRAINT ix_diak UNIQUE ( nev, szulido, anyja ) ) CREATE TABLE tantargy ( tt_id counter not null PRIMARY KEY, tantargy varchar(50) not null UNIQUE )

Példa adatbázisunk sémájának a létrehozása CREATE TABLE diak_tt ( diak_id int not null, tt_id int not null , CONSTRAINT pk_diak_tt PRIMARY KEY ( diak_id, tt_id ) , CONSTRAINT fk_diak_tt_diak FOREIGN KEY (diak_id) REFERENCES diak (diak_id) , CONSTRAINT fk_diak_tt_tt FOREIGN KEY (tt_id) REFERENCES tantargy (tt_id) ) CREATE TABLE temakor ( tt_id int not null REFERENCES tantargy (tt_id), tema_id int not null, temakor varchar(50) not null, CONSTRAINT pk_temakor PRIMARY KEY (tt_id, tema_id), CONSTRAINT ix_temakor UNIQUE (tt_id, temakor) )

Példa adatbázisunk sémájának a létrehozása CREATE TABLE jegy_tipus ( tipus_id counter not null PRIMARY KEY, tipus varchar(50) not null UNIQUE ) CREATE TABLE jegy ( diak_id int not null, tt_id int not null, tema_id int not null, tipus_id int not null REFERENCES jegy_tipus (tipus_id), datum datetime not null, jegy int not null, CONSTRAINT pk_jegy PRIMARY KEY (diak_id, tt_id, tema_id, tipus_id, datum), CONSTRAINT fk_jegy_diak_tt FOREIGN KEY (diak_id, tt_id) REFERENCES diak_tt (diak_id, tt_id), CONSTRAINT fk_jegy_temakor FOREIGN KEY (tt_id, tema_id) REFERENCES temakor (tt_id, tema_id) )

Index létrehozás (Access) A táblákhoz rendelhetünk indexeket, melyek helyes megválasztása esetén a lekérdezések felgyorsíthatók. CREATE [ UNIQUE ] INDEX index ON tábla (mező [ASC|DESC][, mező [ASC|DESC], . . . ]) [WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }] ASC: növekvő, DESC: csökkenő Pl. : CREATE UNIQUE INDEX ix_diak ON diak ( nev, szulido, anyja ) CREATE INDEX ix_diak_anyja ON diak (anyja);
![Táblák sémájának módosítása (Access) ALTER TABLE tábla {ADD {COLUMN mezőtípus [(méret)] [NOT NULL] [CONSTRAINT Táblák sémájának módosítása (Access) ALTER TABLE tábla {ADD {COLUMN mezőtípus [(méret)] [NOT NULL] [CONSTRAINT](http://slidetodoc.com/presentation_image/3f5723d30221a80f39bc248e5cf53a21/image-19.jpg)
Táblák sémájának módosítása (Access) ALTER TABLE tábla {ADD {COLUMN mezőtípus [(méret)] [NOT NULL] [CONSTRAINT index] | ALTER COLUMN mezőtípus [(méret)] | CONSTRAINT többmezős_index} | DROP {COLUMN mező I CONSTRAINT indexnév} } Pl. : ALTER TABLE diak ADD COLUMN testmagassag int NULL; ALTER TABLE diak ADD CONSTRAINT fk_diak_tt_diak FOREIGN KEY (diak_id) REFERENCES diak (diak_id); ALTER TABLE diak DROP CONSTRAINT ix_diak_anyja;

Törlés (Access) DROP {TABLE tábla | INDEX index ON tábla | PROCEDURE eljárás | VIEW nézet} Pl. : DROP TABLE diak; DROP INDEX ix_diak ON diak;
- Slides: 20