9. sql alapok (ddl esettanulmány)szucs/ab1/oa/1809_ddl.pdf · 2018-11-27 · 66/4 b it man tábla...
TRANSCRIPT
B IT MAN66/1 v: 2018.11.25B IT MAN
9. SQL alapok (DDL esettanulmány)
Adatbázis Rendszerek I.
B IT MAN66/2
DDL – Adatstruktúra definiáló utasítások
DDL – Data Definition Language
Adatszerkezetek (elsősorban táblák) létrehozása,
módosítása, törlése
Egy tábla szerkezete, sémája a táblához tartozó
mezőkkel egyértelműen megadható
A mezők megadása a mező nevének és a mező
adattípusának, valamint az integritási feltételeknek a
kijelölésével történik
Több tábla is létezhet ugyanazzal a szerkezettel, de a
nevük nem lehet egyforma
B IT MAN66/3
Tábla (vagy más objektum) létrehozása
CREATE objektumtípus objektumnév paraméterek;
CREATE TABLE táblanév (
mezőnév adattípus [integritási feltétel],
mezőnév adattípus [integritási feltétel],
• • •
mezőnév adattípus [integritási feltétel]
[ ,további integritási feltételek]
);
CREATE TABLE Autó (Rendszám char(7) primary key,Típus char(25) not null,Szín char(15) default 'Fehér',Kor number(3) check (Kor >= 0)
);
Rendszám Típus Szín Kor
GBC-765 Opel Fehér 6
JED-123 Nissan Ezüst 5
AKT-392 Trabant Kék 32
B IT MAN66/4
Tábla (vagy más objektum) létrehozása
CREATE INDEX RIndexON Autó (Rendszám);
Kód
1
2
3
Rendszám
AKT-392
GBC-765
JED-123
Kód
3
1
2
Rendszám Típus Szín
GBC-765 Opel Fehér
JED-123 Nissan Ezüst
AKT-392 Trabant Kék
CREATE VIEW OpelAutó AS Select Kód, Rendszám, Színfrom AutóWhere Tipus='Opel';
Kód
1
Rendszám Szín
GBC-765 Fehér
CREATE SEQUENCE k_s;
insert into Autó values (k_s.nextval, ...
B IT MAN66/5
Adattípusok
Alap adattípusok:
Char(n) – fixen n hosszúságú karaktersorozat,
– Hossza max. 2000 karakter
– A rövidebb szövegek végére szóközök kerülnek
Number(n,m) – n jegyű decimális szám, ebből m tizedes jegy;
– Number(8,2) ↔ 12345.12
– Max. 38 számjegyből állhat
Date – dátum.
B IT MAN66/6
Oracle adattípusok
Szöveges adattípusok
– CHAR (1-2000), fix hosszúságú adatok
– NCHAR (1-2000) Unicode kódolással
– VARCHAR (1-4000)
• változó hosszúságú adatok
• (null ≠ üres karakterlánc)
– VARCHAR2 (1-4000) Unicode kódolással
• (null = üres karakterlánc)
– LONG (max. 2 GB)
– CLOB (max. 4 GDb-1 adathoz)
– NCLOB (max. 4 GDb-1 adathoz, Unicode kódolással)
B IT MAN66/7
Oracle adattípusok
Numerikus adattípusok
– NUMBER (±10125) Max. 38 számjegy
– INT (INTEGER) (±231)
– SMALLINT (±215)
– DECIMAL (±10308) Max. 15 számjegy
B IT MAN66/8
Oracle adattípusok
Dátum és időpont adattípusok
– DATE (ie. 4712.01.01 – isz. 9999.12.31)
– TIMESTAMP (másodperc pontossággal)
B IT MAN66/9
Integritási feltételek megadása
Primary key – elsődleges kulcs
References – hivatkozás másik táblára
Foreign key (mezőlista) References táblanév(mezőlista)
– idegen kulcs megadása ha a kulcs több mezőből áll
Not null – nem maradhat üresen a mező, kötelező
kitölteni
Unique – a mező egyedi, nem kerülhet bele két
egyforma érték
Default – alapérték megadása
Check – értékellenőrzés
B IT MAN66/10
Adattáblák létrehozása – Megszorítások
Az idm mező megadása különböző megszorításokkal:
create table worker(
idm int,
idm int primary key,
idm int default '29',
idm int check(idm >500),
idm int unique,
idm int not null,
);
pk
nn
uq
df
ch
B IT MAN66/11
Példák
create table pld1 (id int primary key,nev varchar2(100),datum date,suly float(8)
);
create table pld3 (id int default id_seq.nextval primary key, nev varchar2(50) not null unique,darab number(10) default '0' not null,idopont timestamp default sysdate,
);
create table pld2 (az int primary key,hely varchar2(30),darab int check (darab>=0),foreign key (az)
references pld1(id));
Fontos a sorrend!create sequence id_seq;
1 2
3
4
B IT MAN66/12
Kapcsolatok kialakítása – 1:1 kapcsolat
Ha egy idegen kulccsal összekapcsoljuk a két táblát, akkor csak azt
jelezzük, hogy csak olyan értékek kerülhetnek a táblába, amelyek a
másik tábla elsődleges kulcs mezőjében megtalálhatók, de ezek az
adatok ismétlődhetnek a mezőben, vagyis ez egy 1:N kapcsolat.
Az 1:1 kapcsolathoz le kell tiltani az ismétlődést, vagyis elő kell írni
az Unique integritást.
Ha az Unique integritást előírjuk, értékes adat csak egyszer
szerepelhet az oszlopban, de null érték többször is. A null értékre
nem vonatkozik az Unique integritás!
B IT MAN66/13
Kapcsolatok kialakítása – 1:1 kapcsolat
create table ember(
ekód number(3) primary key,
név varchar2(40)
);
create table autó(
rendszám char(7) primary key,
tipus varchar2(25),
ekód number(3) unique,
foreign key(ekód) references ember(ekód)
);
Több null érték az oszlopban
B IT MAN66/14
Kapcsolatok kialakítása – 1:N kapcsolat
create table ember(
ekód number(3) primary key,
név varchar2(40)
);
create table autó(
rendszám char(7) primary key,
tipus varchar2(25),
ekód number(3),
foreign key(ekód) references ember(ekód)
);
Ha nem írjuk elő az idegen kulcsra az Unique integritást, 1:N
kapcsolatot alakítunk ki.
Több azonos érték az oszlopban
B IT MAN66/15
Kapcsolatok kialakítása – N:M kapcsolat
Az N:M kapcsolatot egy kapcsolótáblával hozzuk létre
create table ember(
ekód number(3) primary key,
név varchar2(40)
);
create table autó(
akód number(3) primary key,
rendszám char(7),
tipus varchar2(25)
);
create table e_a(
ekód number(3),
akód number(3),
foreign key(ekód) references ember(ekód),
foreign key(akód) references autó(akód)
);
B IT MAN66/16
Kapcsolatok kialakítása – N:M kapcsolat
Ha nem tiltjuk le az ismétlődést, egy rekord többször is bekerülhet a
kapcsolótáblába!
Több azonos
rekord!
alter table e_a add constraint ea_pk primary key (ekód, akód)M1
alter table e_a add constraint ea_uq unique (ekód, akód)M2
B IT MAN66/17
Kapcsolatok kialakítása – N:M kapcsolat
Az N:M kapcsolat kapcsolótáblájának helyes kialakítása:
create table ember(
ekód number(3) primary key,
név varchar2(40)
);
create table autó(
akód number(3) primary key,
rendszám char(7),
tipus varchar2(25)
);
create table e_a(
ekód number(3),
akód number(3),
primary key (ekód, akód),
foreign key(ekód) references ember(ekód),
foreign key(akód) references autó(akód)
);
B IT MAN66/18
Többértékű tulajdonság kialakítása
create table ember(
ekód number(3) primary key,
név varchar2(40)
);
create table nyelvism(
ekód number(3),
nyelv varchar2(25),
primary key (ekód, nyelv),
foreign key(ekód) references ember(ekód)
);
A helyesen megválasztott elsődleges kulccsal próbáltuk megvédeni az
adatok ismétlődését. Erre megfelelő, de az elírásokat (kisbetű-nagybetű,
elírt adat) nem akadályozza meg
Ember
ekód
Nyelv
Név
B IT MAN66/19
Többértékű tulajdonság kialakítása
Javasolt kialakítás
create table ember(
ekód number(3) primary key,
név varchar2(40)
);
create table nyelvism(
nykód number(3) primary key,
nyelv varchar2(25)
);
create table e_ny(
ekód number(3),
nykód number(3),
primary key (ekód, nykód),
foreign key(ekód) references ember(ekód),
foreign key(nykód) references nyelvism(nykód)
);
B IT MAN66/20
Tábla módosítása, átnevezése
ALTER TABLE táblanév
[ADD (oszlopnév definíció, ..., oszlopnév definíció)]
[ALTER COLUMN (oszlopnév definíció, ..., oszlopnév definíció)]
[DROP COLUMN (oszlopnév, ..., oszlopnév)]
[RENAME COLUMN régi_név TO új_név]
– Fontos: a mezők mérete általában csak növelhető!
RENAME táblanév TO új_táblanév
– Tábla átnevezése
ALTER TABLE Autó ADD Tulaj varchar(35);
B IT MAN66/21
ALTER TABLE személy ADD szülév number(4);ALTER TABLE személy RENAME COLUMN szülév TO szüldátum;ALTER TABLE személy MODIFY szüldátum date;ALTER TABLE személy MODIFY id primary key;DESC személy;
Tábla módosításacreate table személy(
id number(4),
név varchar2(30)
);
ALTER TABLE személy DROP primary key;ALTER TABLE személy DROP COLUMN szüldátum;RENAME személy TO person;
B IT MAN66/22
comment on column person.id is '100 és 300 közötti adatok';
Tábla módosítása
alter table person modify név default null;
alter table person modify név default 'Kis Béla';
B IT MAN66/23
Tábla módosítása: megszorítások – Javaslat
ALTER TABLE person ADD CONSTRAINT cn1 PRIMARY KEY(id);ALTER TABLE person ADD CONSTRAINT cn2 UNIQUE (név);ALTER TABLE person ADD CONSTRAINT cn3 CHECK (id > 200);
create table department(dpno int,dpname varchar2(30)
);
ALTER TABLE person ADD dp int;ALTER TABLE person ADD CONSTRAINT cn5 FOREIGN KEY (dp)
REFERENCES department(dpno);
ALTER TABLE departmentADD CONSTRAINT cn4 primary key(dpno);
ALTER TABLE person DROP CONSTRAINT cn1;
B IT MAN66/24
Megszorítások listázása
SELECT * FROM user_constraints WHERE table_name = 'PERSON'
C – check constraint on a table
P – primary key
U – unique key
R – referential integrity
V – with check option, on a view
O – with read only, on a view
Csupa nagybetű!
B IT MAN66/25
Tábla törlése
DROP TABLE táblanév;
Azok a táblák amelyekre más tábla hivatkozik, nem
törölhetők!
DROP TABLE Autó;
B IT MAN66/26
Termek
Vasarlas
Idopont DarabTkod VID
Nev
Kategoria
Leiras
FizModok
NevTkod Ar Leiras
Vasarlo
Nev
Kategoria
VID Cim
Kkod
Fizmod Fkod
Vedd észre! – Táblák létrehozási sorrendje
Sorszam
1. Először azokat a táblákat kell létrehozni, amelyekből nem
hivatkozunk más táblákra
2. Azután azokat, amelyekből hivatkozunk más táblákra
1 2
34
5
B IT MAN66/27
Termek
Vasarlas
Idopont DarabTkod VID
Nev
Kategoria
Leiras
FizModok
NevTkod Ar Leiras
Vasarlo
Nev
Kategoria
VID Cim
Kkod
Fizmod Fkod
Vedd észre! – Táblák törlési sorrendje
Sorszam
1. Először azokat a táblákat lehet törölni, amelyekből hivatkozunk más
táblákra
2. Azután azokat, amelyekből nem hivatkozunk más táblákra
5 4
32
1
B IT MAN66/28
Lehetőségek
Tábla létrehozása másolással (új táblanévvel)
– CREATE TABLE Személyek AS SELECT * FROM Person;
Person
ID
1
2
3
Név Dp
Kis Béla 10
Kő Dezső 11
Hó Jenő 10
Személyek
ID
1
2
3
Név Dp
Kis Béla 10
Kő Dezső 11
Hó Jenő 10
Üres tábla létrehozása másolással
– Create table Személyek as select * from Person WHERE 1=0;
Person
ID
1
2
3
Név Dp
Kis Béla 10
Kő Dezső 11
Hó Jenő 10
Személyek
ID Név Dp
B IT MAN66/29
Lehetőségek
Üres tábla létrehozása másolással, eltérő szerkezettel
– CREATE TABLE Személyek AS SELECT id, név FROM Person
WHERE 1=0;
Person
ID
1
2
3
Név Dp
Kis Béla 10
Kő Dezső 11
Hó Jenő 10
Személyek
ID Név
B IT MAN66/30
Lehetőségek
Tábla létrehozása több táblából
– create table Személyek as select ID, Név as NAME, DPNAME
from Person join Department on dp=dpno
ID
1
2
3
Név Dp
Kis Béla 10
Kő Dezső 11
Hó Jenő 10
DpNo
10
11
DpName
Designer
Programmer
DepartmentPerson
ID Name DpName
Személyek
1
2
3
Kis Béla
Kő Dezső
Hó Jenő
Designer
Programmer
Designer
B IT MAN66/31
Nézettáblák – VIEW
Olyan "virtuális" tábla, mely fizikailag nem létezik, csak a
létrehozó utasítását tárolja a rendszer (≈ letárolt lekérdezés)
Normál táblaként viselkedik, így pl. lekérdezhető a tartalma
A rendszer akkor állítja elő a tartalmát, amikor egy parancs
hivatkozik rá, így a tartalom mindig friss, aktuális adatokból áll
Nem tárol adatokat, feldolgozás után azonnal megszűnik
Feldolgozása lassabb, mint a normál tábláké
Bizonyos körülmények között módosítható a tartalma,
természetesen ekkor a nézettáblán keresztül az eredeti táblák
tartalma módosul
Lehet csak olvashatóvá tenni
Lehet "materizálni", vagyis tényleges fizikai táblaként
létrehozni
B IT MAN66/32
Nézettáblák – VIEW
CREATE [OR REPLACE] [MATRERIALIZED] VIEW
nézettáblanév [(A1, A2, … An)]
AS SELECT … [WITH READ ONLY]
– OR REPLACE – Felülírja a meglévő táblát
– MATERIALIZED – Fizikailag is létrejön a tábla (pillanatfelvétel!)
– (A1,A2,…An) – Alias nevek adhatók a mezőknek
– WITH READ ONLY – Csak olvasható adattartalom
Ember
Ekód Név Város
114 Kis Géza Eger
178 Jó Éva Miskolc
Telefon
20-9555666
30-8765432
CREATE VIEW e_vw1 (id, name) AS SELECT Ekód, Név from Ember where cím='Miskolc'
select * from e_vw1;
E_VW1
ID
114
Name
Kis Géza
178 Jó Éva
B IT MAN66/33
Nézettáblák – VIEW
Módosítható nézettáblák
– A mögöttük lévő valódi táblák tartalma módosul
– Minden olyan nézettábla alapértelmezésként módosítható,
ahol az adatok forrása egyértelműen beazonosítható.
– Ehhez a létrehozó CREATE parancsban be kell tartani
bizonyos feltételeket:
• Nem lehet benne DISTINCT, ORDER BY, GROUP BY kulcsszó
• Nem lehet benne összesítő függvény
• Nem lehet benne al-lekérdezés
• Nem lehet benne halmazművelet (union, minus, intersect)
– Nem módosíthatók azok az oszlopok, amelyek sorfüggvények
használatával jöttek létre, pl. címből kiemelt város név
– Több táblából származó nézettábla esetén a módosítás
egyszerre csak egy táblát érinthet
B IT MAN66/34
Nézettáblák – VIEW
Ember
Ekód Név Város
114 Kis Géza Eger
178 Jó Éva Miskolc
Telefon
20-9555666
30-8765432
CREATE OR REPLACE VIEW e_vw1 (id, name, city) AS SELECT Ekód, Név, Város from Ember;
E_VW1
ID
114
Name
Kis Géza
178 Jó Éva
City
Eger
Miskolc
update e_vw1 set city='Miskolc' where id=114
E_VW1
ID
114
Name
Kis Géza
178 Jó Éva
City
Miskolc
Miskolc
select * from e_vw1;
select * from Ember;
Ember
Ekód Név Város
114 Kis Géza Miskolc
178 Jó Éva Miskolc
Telefon
20-9555666
30-8765432
Természetesen, ha az Ember táblát
frissítjük, és utána kiíratjuk az e_vw1
nézettábla tartalmát, akkor abban is
benne lesznek a frissítések.
B IT MAN66/35
Nézettáblák – VIEW
Beszúrás nézettáblába:
– A beszúrás a nézettáblán keresztül közvetlenül az
alaptáblába történik
– Csak azok azoknak az alaptábla mezőknek adhatunk
értéket, amelyek szerepelnek a nézettáblában
– Csak akkor oldható meg, ha elég mező van a nézettáblában:
• Az alaptábla kulcsmezőjének szerepelnie kell, kivéve, ha
automatikus sorszámozású
• Valamennyi not null mezőnek szerepelnie kell, kivéve ha
van default értékük
Törlés nézettáblából:
– Közvetlenül az alaptáblára hat
– Csak a látható rekordok törölhetők
B IT MAN66/36
Nézettáblák – VIEW
Ember
Ekód Név Város
114 Kis Géza Miskolc
178 Jó Éva Miskolc
Telefon
20-9555666
30-8765432
E_VW1
ID
114
Name
Kis Géza
178 Jó Éva
City
Miskolc
Miskolc
CREATE OR REPLACE VIEW e_vw1 (id, name, city) AS SELECT Ekód,Név,Város from Ember
where város='Miskolc';
insert into e_vw1 values(200, 'Hó Jenő', 'Eger';
Beszúródik a rekord az Ember táblába, de ha listázzuk az e_vw1 nézettáblát,
nem lesz benne, mert a város nem miskolc!
insert into e_vw1 values(222, 'Kő Kata', 'Miskolc';
select * from e_vw1; E_VW1
ID
114
Name
Kis Géza
178 Jó Éva
City
Miskolc
Miskolc
222 Kő Kata Miskolc
B IT MAN66/37
Nézettáblák – VIEW
CREATE OR REPLACE VIEW e_vw1 (id, name, city) AS SELECT Ekód,Név,Város from Ember
where város='Miskolc';
delete from e_vw1 where id=222;
A 200-as ID-jű rekordot nem tudjuk a nézettáblából törölni, mert nem látható
benne (nem miskolci)!
E_VW1
ID
114
Name
Kis Géza
178 Jó Éva
City
Miskolc
Miskolc
222 Kő Kata Miskolc
Ember
Ekód Név Város
114 Kis Géza Miskolc
178 Jó Éva Miskolc
Telefon
20-9555666
30-8765432
200 Hó Jenő Eger ‒
222 Kő Kata Miskolc ‒
delete from e_vw1 where id=200; 0 row(s) deleted
1 row(s) deleted
B IT MAN66/38
E_VW1
Nézettáblák – VIEW
CREATE OR REPLACE VIEW e_vw1AS SELECT Város, count(*) from Ember group by Város;
Város
Miskolc
Eger
-
Ember
Ekód Név Város
114 Kis Géza Miskolc
178 Jó Éva Miskolc
Telefon
20-9555666
30-8765432
200 Hó Jenő Eger ‒
222 Kő Kata ‒ ‒
update e_vw1 set Város='Győr' where város is null
CREATE OR REPLACE VIEW e_vw1 AS SELECT Város, count(*) "Lakók száma" from Ember group by Város;
Lakók száma
2
1
1
Must name this expression with a column alias!
Data manipulation operation not legal on this view!
B IT MAN66/39
Nézettáblák – VIEW
Nézettábla módosítása:
– A create parancsot az or replace paranccsal kiegészítve
egyszerűen felülírjuk a view létrehozó parancsát
Nézettáblák listázása:
Nézettábla törlése:
– DROP VIEW nézettáblanév
– Az adatok nem törlődnek, hiszen azok az alaptáblákban
vannak!
DROP VIEW e_vw1
select * from user_views
B IT MAN66/40
Nézettáblák – VIEW
Mire használjuk a nézettáblákat?
– Ha nem akarjuk, hogy egy felhasználó egy (vagy több) tábla
teljes tartalmát lássa, készítsünk egy nézettáblát, és arra
adjunk neki jogosultságot.
• Pl. ha kiadjuk a select * from user_tables parancsot, csak a
saját tábláinkat látjuk, ugyanis a user_tables tábla egy számunkra
leszűrt nézettábla.
– Egyszerűsíthető velük a munka:
• Ha több táblából készítünk egy nézettáblát, sokkal egyszerűbb
lekérdezni, nem kell az összekapcsolásokkal foglalkozni.
• Pl. ha készítünk egy nézettáblát a where sysdate-készítés <=7
feltétellel, bármikor kilistázzuk, az elmúlt hét adatai lesznek benne
– Függetlenítik az alkalmazásokat az alaptábláktól:
• Ha változik egy alaptábla szerkezete, a belőle készült nézettábla
általában változtatás nélkül tovább használható
B IT MAN66/41
Indexek
Az index a táblához kapcsolódó, gyors keresést lehetővé tevő
táblázat.
Az index tartalmazza, hogy a tábla rekordjai -egy vagy több oszlop
alapján- sorba rendezve hogyan következnek egymás után.
Fontos: az index csak egy mutató, amely hivatkozik a táblára.
Az indexek szerkezete általában B-fa, ami nagyon gyors keresést
tesz lehetővé, a soros, "minden rekordot egymás után
megvizsgálunk" kereséshez képest.
Az indexek létrehozása jelentősen növeli az adatbázis
hatékonyságát, de a méretét is.
Egy általános adatbázisban az indexek helyfoglalása körülbelül
ugyanakkora, mint az adatoké.
B IT MAN66/42
Indexek
Ha egy adathalmaznak nincs indexe (logikai sorrendje), akkor a leg-
rosszabb esetben az összes rekordot be kell olvasni a fizikai tároló-
helyről, miközben keresünk egy konkrét adatok. Ez nagy adatmeny-
nyiségek (> 1000) esetén sok erőforrást igényel, és rendkívül lassú
is lehet.
Olyan ez, mint amikor egy dobozba bedobáljuk 1000 ember név-
jegykártyáját, és egyesével kiemelve keressük a vízvezetékszerelő
telefonszámát. (idő… idő… idő…)
Ha a dobozban név szerint vannak sorba rendezve a névjegykártyák
(elsődleges kulcs!), ez akkor sem könnyíti meg a keresést, ehhez
ugyanis tudni kellene az illető nevét.
Akkor lehet rendkívül eredményes a keresés, ha egy másik dobozt
is létrehozunk, amibe szakmák szerint rendezzük a névjegykár-
tyákat (index), és abban keresünk. Ha vízvezetékszerelőt keresünk,
nyilván a rendezett lista végén keresgélünk, és nagyon hamar meg
is találjuk a mestert.
B IT MAN66/43
B-fa (bináris keresőfa)
Az Oracle általában B-fa szerkezetet használ az indexek tárolására.
A B-fa tartományokra osztott adatok rendezett listája
0 .. 40
41 .. 80
. . .
160..200
0 .. 10
11 .. 17
. . .
32 .. 40
41 .. 48
49 .. 55
. . .
75 .. 80
160..172
173..177
. . .
193..200
0,rowid
1,rowid
. . .
10,rowid
11,rowid
12,rowid
. . .
17,rowid
160,rowid
161,rowid
. . .
172,rowid
173,rowid
174,rowid
. . .
177,rowid
Ágak: kereséshez
Levelek: adatok
eléréséhez
. . .
B IT MAN66/44
B-fa (bináris keresőfa)
A teljes fa egy önkiegyensúlyozó bináris keresőfa, melyet a rendszer
az adatok számának, eloszlásának megfelelően, DML műveletek
esetén (beszúrás, törlés, módosítás) folyamatosan alakít, karbantart
A szintek száma minden csomópont részfáiban megegyezik, így a
gyökértől a levelekig eljutni minden esetben ugyanannyi lépésben
lehet, vagyis minden adatot ugyanannyi idő alatt lehet megtalálni
A szintek száma egyben meghatározza egy adat elérési sebességét
Annyi I/O művelet (és logikai vizsgálat) szükséges egy adat
betöltéséhez, ahány szint van a keresőfában
Ha egy SQL utasítás csak indexelt oszlopokat használ, a rendszer
az adatokat közvetlenül az indexekből, és nem a táblából olvassa ki
Ha egy utasításban nem indexelt adatok is vannak, akkor azokat a
levélben, az indexelt érték mellett lévő rowid (link, egyedi rekord
azonosító) alapján olvassa be a rendszer
B IT MAN66/45
B-fa (bináris keresőfa)
Ágak:
– A gyökér olyan információkat tartalmaz, amely alsóbb szintű
ágakra mutat, csak keresési funkciót lát el
– Az ágak szintjeinek a száma az adatok mennyiségétől függ
– A legutolsó szintű ágak a levelekre mutatnak
Levelek:
– Annyi levél van, ahány indexelt adat
– Minden levélben van egy index kulcs, és az Oracle-ben rowid-
nek nevezett link (egyedi rekord azonosító), ami az indexhez
tartozó rekordra mutat
– A leveleket linkek kapcsolják a bal és jobb oldali
szomszédaikhoz, megkönnyítve ezzel egy adott sorrendben
történő bejárásukat
B IT MAN66/46
Indexek
Oracle index típusok:
– Egyoszlopos (single)
• Lehet Unique, vagy Non-Unique
• A legtöbbször ezt használjuk
• Automatikusan létrejön primary key és unique oszlopokra
– Többoszlopos (concatenated)
• Több mező alapján jön létre, pl. (vezetéknév, keresztnév)
• Csak akkor hasznos, ha az oszlopok szerepelnek az utasítás
(select, update, delete) where részében
– Unique: Biztosítja az adatok egyediségét az oszlopban
– Compute Statistics: a rendszer statisztikát készít az index
létrehozásakor, melyet felhasznál a parancsok végrehajtásának
optimalizálásához
– A primary key és az unique megszorítás automatikusan létrehoz
egy unique típusú indexet a megadott oszlopra!
B IT MAN66/47
Indexek
CREATE [UNIQUE] INDEX indexnév
ON táblanév (mezőnév, mezőnév…)
[COMPUTE STATISTICS];
CREATE INDEX p_id1ON Person (Name);
ID
1
2
3
Name Dp
Kis Béla 10
Kő Dezső 11
Hó Jenő 10
Person
CREATE UNIQUE INDEX p_id2ON Person (Dp, Name);
Index létrehozása
CREATE Table person(ID int primary key,Name char(40) unique,...
Automatikusan létrejön index az ID és a
Name mezőre!
A táblára kiadott insert, delete, update
parancsok után automatikusan módosul
az index!
B IT MAN66/48
Indexek
select * from user_indexes where table_name='PERSON'
DROP INDEX indexnév;
DROP INDEX p_id1;
Adott táblához tartozó indexek listázása:
Index törlése
B IT MAN66/49
Szekvenciák (sorozatok) – Sequence
Tábláktól (objektumoktól) független adatbázis objektum, mely
segítségével sorozatokat (egyedi egész számokat)
generálhatunk
Mindig egész (integer) típusú
Több felhasználó is használhatja egyszerre, több táblához is
használható egyszerre
Általában elsődleges kulcsok értékének előállítására
használjuk
Létrehozása:
– START WITH – Kezdőérték
– INCREMENT BY – Növekedés
CREATE SEQUENCE sorozatnév
[START WITH m]
[INCREMENT BY n]
CREATE SEQUENCE sn;
B IT MAN66/50
Szekvenciák (sorozatok) – Sequence
Használata:
– Aktuális értékét a sorozatnév.currval függvény adja vissza
– A következő értékét a sorozatnév.nextval függvénnyel
lehet lekérdezni
Törlése:
insert into person values(sn.nextval,...;
DROP SEQUENCE sorozatnév
B IT MAN66/51
Szekvenciák (sorozatok) – Sequence
Speciális lehetőség: értékek generálása ciklusban, alsó- és
felső határ között:
CREATE SEQUENCE snprbstart with 10increment by 3minvalue 10maxvalue 20cyclecache 3;
10-ről indul,
3-asával növekszik,
10 és
20 között
ciklusban működik,
egyszerre 3 értéket állít elő
Az eredmények láttán úgy
érzem, ez kb. annyira
hasznos, mint az egyszer
használható, eldobható usb
pendrive :-)
Az ID-t állította elő a sorozat,
a Data-t én adtam meg!
B IT MAN66/52
Nyomkövetési feladat
IT
B IT MAN65/53
Órai feladat (1)
Kövesd a parancsokat!
CREATE TABLE dolgozo (nev VARCHAR2(40),kor NUMBER,munkakor VARCHAR2(60)
);
ALTER TABLE dolgozo ADD szuletesiev NUMBER(4) NOT NULL;
– Születési év mező hozzáadása, kötelező megadással
ALTER TABLE dolgozo DROP COLUMN kor;
– A kor mező törlése a szerkezetből
ALTER TABLE dolgozo ADD szemelyiszam NUMBER(13);
– Személyiszám mező hozzáadása
ALTER TABLE dolgozo MODIFY szemelyiszam PRIMARY KEY;
– Elsődleges kulcs kialakítása a személyiszám mezőből
– Helytelen adatok esetén nem megoldható!
nev
vc2(40)
munkakor
vc2(60)
kor
N
dolgozo
B IT MAN65/54
Órai feladat (2)
ALTER TABLE dolgozo DROP PRIMARY KEY;
– Elsődleges kulcs megszorítás törlése
ALTER TABLE dolgozo ADD id NUMBER(4) PRIMARY KEY;
– ID mező hozzáadása elsődleges kulcsként
ALTER TABLE dolgozo RENAME COLUMN munkakor TO mkor;
– Munkakör nevű mező átnevezése mkor-re
ALTER TABLE dolgozo RENAME COLUMN szuletesiev To szulido;
– Születésiév nevű mező átnevezése szuülidő-re
ALTER TABLE dolgozo RENAME COLUMN szemelyiszam TO szemsz;
– Személyiszám nevű mező átnevezése szemsz-re
ALTER TABLE dolgozo MODIFY szulido date;
– Szülidő mező típusának módosítása dátumra
– ,
ALTER TABLE dolgozo MODIFY szemsz char(13);
– Szemsz nevű mező típusának módosítása karakteresre
Column to be modified must be empty to change datatype!
B IT MAN65/55
Órai feladat (2.5)
Add meg azt a CREATE parancsot, amivel a fenti parancsok
hatására kialakult táblaszerkezetet létre lehet hozni!
dolgozo
id
N(4)
nev
vc(40)
mkor
vc(60)
szulido
D
szemsz
c(13)
create table dolgozo(id number(4) primary key,nev varchar2(40),mkor varchar2(60),szulido date,szemsz char(13)
);
B IT MAN65/56
Órai feladat (3)
Kövesd tovább a parancsokat!
CREATE TABLE telefonszam (id NUMBER(4) NOT NULL,mobil char(9) UNIQUE
);
ALTER TABLE telefonszam ADD FOREIGN KEY(id) REFERENCES
dolgozo(id);
telefonszam
id
N(4)
mobil
c(9)
dolgozo
id
N(4)
nev
vc(40)mkor
vc(60)
szulido
Dszemsz
c(13)
B IT MAN66/57
Órai feladat (4)
Kövesd tovább a parancsokat!
CREATE TABLE fonok (
fonokid NUMBER(4),
idkinek NUMBER(4),
PRIMARY KEY (fonokid, idkinek),
CONSTRAINT c1 FOREIGN KEY (fonokid) REFERENCES dolgozo(id),
CONSTRAINT c2 FOREIGN KEY (idkinek) REFERENCES dolgozo(id)
);
Rajzold meg mindhárom tábla relációs modelljét a köztük lévő
kapcsolatokkal együtt!
fonok
fonokid
N(4)
idkinek
N(4)
B IT MAN66/58
Órai feladat (4.5)
Rajzold meg mindhárom tábla relációs modelljét a köztük lévő
kapcsolatokkal együtt!
dolgozo
id
N(4)
nev
vc(40)mkor
vc(60)
szulido
Dszemsz
c(13)
telefonszam
id
N(4)
mobil
c(9)
fonok
fonokid
N(4)
idkinek
N(4)
B IT MAN66/59B MANIT
Egyéni feladat
B IT MAN66/60
Egyéni feladat (1)
Készítsen egy táblát:
– Neve legyen Melós,
– Legyen benne MID numerikus mező, max. 4 számjeggyel,
– Legyen benne Név mező, 30 karakterrel.
Készítse el a következő módosításokat:
– MID legyen elsődleges kulcs
– Szúrjon be egy Születés nevű, dátum típusú mezőt
– A Név alapértéke legyen Kiss Robi
– A Születés ne lehessen üres
– A Születés alapértéke legyen 1990.01.01
B IT MAN66/61
Egyéni feladat (1)
Melos tábla elkészítése
create table melos(
mid number(4),
nev varchar2(30)
);
MID legyen elsődleges kulcs
alter table melos modify mid primary key
Szúrjon be egy Születés nevű, dátum típusú mezőt
alter table melos add szuletes date
A Név alapértéke legyen Kiss Robi
alter table melos modify (nev default 'Kiss Robi')
B IT MAN66/62
Egyéni feladat (1)
A Születés ne lehessen üres
alter table melos add constraint szul_nn check (szuletes is not null);
A Születés alapértéke legyen 1990.01.01
select sysdate from dual -> 10/30/2018
alter table melos modify (szuletes default '01/01/1990')
B IT MAN66/63
Készítsen egy másik táblát:
– Neve legyen Munkakör
– Legyen MAZ nevű, numerikus mezője, max. 4 számjeggyel
– Legyen MkNév nevű mezője, max. 30 karakter
Készítse el a következő módosításokat:
– MAZ legyen elsődleges kulcs
– MkNév ne lehessen üres
– Szúrjon be egy Kereset nevű numerikus mezőt (7 számjegy!)
– Szúrjon be egy ellenőrzést, a Kereset ne lehessen 200-nál
kevesebb!
Egyéni feladat (2)
B IT MAN66/64
Munkakör tábla elkészítése
create table munkakor(
maz number(4),
mknev varchar2(30)
);
MAZ legyen elsődleges kulcs
alter table munkakor modify maz primary key
MkNév ne lehessen üres
alter table munkakor add constraint mknev_nn check (mknev is not null);
Egyéni feladat (2)
B IT MAN66/65
Szúrjon be egy Kereset nevű numerikus mezőt (7 számjegy!)
alter table munkakor add kereset number(7)
Szúrjon be egy ellenőrzést, a Kereset ne lehessen 200-nál
kevesebb!
alter table munkakor add constraint ker_ch check (kereset > 200);
Egyéni feladat (2)
B IT MAN66/66
Készítse el a következő módosításokat:
– Szúrjon be egy Mkör nevű numerikus mezőt a Melós táblába, (4
számjegy)
– Az Mkör mezőből készítsen idegen kulcsmezőt, mely a
Munkakör táblával tartja a kapcsolatot!
Írassa ki a táblák szerkezetét, ellenőrizze a megoldást!
Törölje le a két táblát!
Egyéni feladat (3)
B IT MAN66/67
Szúrjon be egy Mkör nevű numerikus mezőt a Melós táblába, (4
számjegy)
alter table melos add mkor number(4)
Az Mkör mezőből készítsen idegen kulcsmezőt, mely a Munkakör
táblával tartja a kapcsolatot!
alter table melos add constraint melos_fk foreign key (mkor) references
munkakor(maz)
Írassa ki a táblák szerkezetét
desc melos; desc munkakor;
Írassa ki az összes megszorítást, megkötést
select * from all_constraints where table_name='MELOS'
Egyéni feladat (3)
B IT MAN66/68
Törölje le a két táblát
drop table melos
drop table munkakor
Egyéni feladat (3)
B IT MAN66/69B IT MAN
Csá!
B IT MAN66/70
VÉGEVÉGE