Adatbázisok I SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER Módosítás: DML: - rekord felvitel INSERT - rekord törlés DELETE - rekord módosítás UPDATE Lekérdezés: DQL: - lekérdezés SELECT Vezérlés DCL: - védelem GRANT,.. - tranzakció kezelés COMMIT,.. 2 1
Táblák létrehozása Az üres adatszerkezeti elemeket, struktúrákat kell először megadni, később töltjük fel őket adatokkal A táblázat szerkezete, sémája, a már ismert, a táblázathoz tartozó adatmezőkkel írható le. A mezők megadása a Mezők nevének Adattípusának és Az integritási feltételeknek a kijelölésével történik. 3 Táblák megadása Összefoglalva a tábla létrehozásakor meg kell adni: Tábla nevét Mezők nevét Mezők típusát Integritási feltételeket 4 2
Táblák megadása CREATE TABLE táblanév(m 1 t 1 [i 1 ] [,, m i t i [i i ]], [i g ]); m i : mezőnév t i : típus i i : mezőhöz kötött integritási feltétel i g : mezőcsoporthoz kötött integritási feltétel 5 Táblák megadása CREATE TABLE tnév (mnév1 típus1 intfelt1, intfelt); CHAR(n) NUMBER(n,m) DATE PRIMERY KEY NOT NULL UNIQUE CHECK felt REFERENCES tábla PRIMERY KEY (m1,m2) FOREIGN KEY(m1, m2) REFERENCES tábla CHECK felt CREATE TABLE AUTO (RSZ CHAR(6) PRIMARY KEY, AR NUMBER(9) NOT NULL, GYART_IDO DATE); 6 3
Adattípusok Szabványosított hivatkozást nehéz megadni, mert a legtöbb elterjedt RDBMS más-más elnevezést használ. Legfontosabb típusok: CHAR (n) : n hosszúságú szöveg NUMBER(n [,m]) : n hosszú szám, ahol m a tizedesjegyek száma DATE : dátum 7 Numerikus adattípusok Fix vagy lebegőpontos számok Fixpontos adattípusok: A fixpontos szám rendelkezik egész (P) és tizedesjegy(s) résszel. NUMERIC(P,S) DECIMAL(P,S) INTEGER SMALLINT 8 4
Numerikus adattípusok Fix vagy lebegőpontos számok Lebegőpontos adattípusok: Mantissza és kitevő is előjeles érték. A lebegőpontos értéknek "pontosság" tulajdonsága is van. (A mantisszában lévő szignifikáns bináris számjegyek száma) FLOAT(P) REAL DOUBLE PRECISION Egyedi adattípus: MONEY A numerikus adattípusok esetében sok problémát okoz, hogy a tárolás megvalósítás függő. 9 Dátum és Idő Dátum és idő kezelése sok problémát vet fel Dátum típusú konstans formája: DATE '1948-05-14' TIME '15:00:02.5' Dátum és idő együtt jelenik meg a TIMESTAMP értékben: TIMESTAMP '1948-05-14 12:00:00' Microsoft SQLServer dátumábrázolása DateTime típus :1753.jan.1. és 9999.dec.31 közötti dátumidő adatok három századmásodperc pontossággal, 8 byte-on tárolva SmallDateTime típus: 4 byte, 1900.jan.1-2079.jún.6 közötti egyperces pontossággal. 10 5
Példa táblák létrehozására CREATE TABLE Auto ( TUL NUMBER(3) NOT NULL, RSZ CHAR(6) NOT NULL UNIQUE, TIP CHAR(10), SZIN CHAR(10), EVJ NUMBER(4), AR NUMBER(8)); 11 Megszorítások Egy oszlopra vonatkozó megszorítások NULL az attribútum definíciójában arra utal, hogy az adat megadása nem kötelező, ez az alapértelmezés ezért a legritkább esetben írják ki. NOT NULL az attribútum definíciójában arra utal, hogy az adat megadása kötelező, azaz nem vihető be olyan sor a relációban, ahol az így definiált adat nincs kitöltve. PRIMARY KEY ez az oszlop a tábla elsődleges kulcsa. UNIQUE ez az oszlop a tábla kulcsa. CHECK(feltétel) csak feltételt kielégítő értékek kerülhetnek be az oszlopba. [FOREIGN KEY] REFERENCES reláció_név [ (oszlop_név) ], ez az oszlop külső kulcs 12 6
Több oszlopra vonatkozó megszorítások PRIMARY KEY(oszlop1[, oszlop2,...]) ezek az oszlopok együtt alkotják az elsődleges kulcsot. UNIQUE(oszlop1[, oszlop2,...]) ezek az oszlopok együtt kulcsot alkotnak. CHECK(feltétel) csak feltételt kielégítő sorok kerülhetnek be a táblába. FOREIGN KEY (oszlop1[, oszlop2,...]) REFERENCES reláció(oszlop1[, oszlop2,...]), az oszlopok külső kulcsot alkotnak a megadott tábla oszlopaihoz. 13 Tábla szerkezet módosítása ALTER objektumtípus azonosító paraméterek ALTER TABLE tnév ADD MODIFY(mnev tip intfelt intfelt); ALTER TABLE Auto (TULAJ REFERENCES Ember); Objektum megszüntetése: DROP objektumtípus azonosító paraméterek DROP TABLE tnév; Pl. DROP TABLE Auto 14 7
Példák CREATE TABLE osztaly ( oszt_azon INT PRIMARY KEY, nev VARCHAR(14) NOT NULL, varos VARCHAR(13) NOT NULL, CONSTRAINT unev UNIQUE(nev)); CREATE TABLE alkalmazott ( alk_azon INT PRIMARY KEY, nev VARCHAR(10) NOT NULL, beosztas VARCHAR(9) NOT NULL, belepes DATE NOT NULL, fizetes FLOAT NOT NULL, jutalom FLOAT, oszt_azon INT NOT NULL, CONSTRAINT idegenkulcs FOREIGN KEY (oszt_azon) REFERENCES osztaly (oszt_azon)); 15 Példák CREATE TABLE fiz_oszt ( f_oszt INT PRIMARY KEY, min FLOAT NOT NULL, max FLOAT NOT NULL, CONSTRAINT minmax_rule CHECK (min < max)); 16 8
Példák ALTER TABLE reláció_név ADD attribútum_név adattípus [(szélesség)]; ALTER TABLE reláció_név MODIFY attribútum_név adattípus (új_szélesség) [NOT NULL]; ALTER TABLE reláció_név RENAME COLUMN régi_név TO új_név; ALTER TABLE reláció_név DROP COLUMN attribútum_név; DROP TABLE [IF EXISTS] reláció_név; Példák ALTER TABLE osztaly ADD oszt_vez int NOT NULL; ALTER TABLE osztaly DROP COLUMN oszt_vez; DROP TABLE osztaly; kényszerek (alkalmazott tábla idegenkulcs hivatkozás) miatt nem hajtható végre! 17 Indexek CREATE [UNIQUE] INDEX index_név ON reláció(oszlop1, oszlop2,...); Egyedi index = kulcs Példák CREATE INDEX belepes_index ON alkalmazott(belepes); DROP INDEX belepes_index; 18 9
Adatbázis tervezés kérdései Adatstruktúra helyessége A tervezés számos hibalehetőséget rejt magában. Hibaforrások: -nem megfelelő relációkat hozunk létre -nem megfelelő mezőket alkotunk meg -nem megfelelő a mezők elnevezése -nem a megfelelő mezők kerülnek egy relációba -nem megfelelő a relációk kapcsolatának megvalósítása -nem megfelelő a mezők adattípusa -nem megfelelő a megadott integritási feltétel rendszer 19 Redundancia Redundancia: adatelemek többszörös, ismételt letárolása. Következmény: anomáliák beszúrási anomália módosítási anomália törlési anomália inkonzisztencia 20 10
Helytelen séma: Anomáliák Beszúrási anomália: egy rekord felvitelekor, felesleges, már letárolt információkat újra fel kell vinni(pl. minden új dolgozó felvitelénél fel kell vinni a munkahely adatait is; ha valahol véletlenül elgépeljük, új adatot hozunk létre) 21 Anomáliák Módosítási anomália: egy adat módosításához több helyen is módosítani kell az adatbázisban(ha pl. megváltozik a munkahely címe, akkor minden egyes, az adott munkahelyen dolgozó rekordjában el kell végezni a módosítást többletmunka és ügyelni kell, hogy mindenhol helyesen elvégezzük a módosítást) Törlési anomália: egy információelem megszűnésekor más, hozzá nem tartozó információk is elvesznek(ha pl. máshol nincs letárolva a munkahely címe, akkor az adott munkahelyen dolgozók kitörlésével a munkahelyre vonatkozóadatok is törlődnek) 22 11
Anomáliák oka Az anomáliák abból származnak, hogy nem az igazán összetartozó adatokat vesszünk be egy relációba. Hogy mely mezők tartoznak igazán egy relációba, azt a mezők közötti összetartozási viszony, a mezők közötti függőségek határozzák meg. Legfontosabb függőségi típus a funkcionális függőség. 23 12