Jezik za rad s relacijskom bazom podataka
Maja Petekić
Prisjetimo se . . . Baza podataka mjesto na kojemu se čuvaju podaci
Relacijska baza podataka ona baza podataka u kojoj se podaci čuvaju u tabelama i koja istovremeno vodi evidenciju o tome kako su te tabele međusobno povezane
Tabela objekt u kojemu se čuvaju podaci svaka tabela sadrži podatke o određenom entitetu
Sadržaj . . . •
Naredbe (za definiranje podataka, za rukovanje podacima, za
• • • • •
Ključne riječi Detaljan opis naredbi View (pogled) Primjer Formiranje upita (upiti nad jednom tabelom, upit nad jednom
•
Standardni način povezivanja SQL-a s višim programskim jezicima Kursori
•
upravljanje podacima)
tabelom uz prikaz modificiranog sadržaja tabele, ulaganje upita nad jednom tabelom u upit nad drugom tabelom, upiti kojima se realizira spajanje tabela, upiti nad tabelama koje u sebi imaju hijerarhijsku strukturu)
Uvod . . . za rad s relacijskom bazom podataka postoji više jezika: SQL, QUEL, QBE
to su jezici četvrte generacije, koji se služe parafraziranim dobro oblikovanim formulama logike prvog reda
svi opisuju uvjete pretraživanja pomoću predikatne logike prvog reda
SQL je “userfriendly” jezik
SQL – Structured Query Language . . . strukturirani upitni jezik . . .
tvorac Chamberlin
nastao 1974. godine u IBM-ovom istraživačkom laboratoriju u Californiji
prethodnik mu je SEQUEL
Osnovne karakteristike . . . 1.
Jednostavnost u korištenju
tabela (relacija) se kreira izvršnom naredbom i odmah je raspoloživa za korištenje
svi podaci se memoriraju u obliku tabela i rezultat svake operacije se logički prikazuje tabelom
1.
Mogućnost interaktivnog i aplikativnog programiranja
SQL daje odgovore na unaprijed nedefinirane zahtjeve ili se SQL blokovi ugrađuju u viši programski jezik (Fortran, C) i mogućuju klasičnu obradu
1.
Minimalna proceduralnost
SQL definira ŠTO, a ne KAKO: koji podaci se žele, koji uvjeti moraju biti ispunjeni, bez specifikacije procedure za dobivanje željenih podataka funkcija SQL-a je omogućavanje definiranja, korištenja i kontrole podataka relacijske baze
SQL je na višem nivou apstrakcije, nego klasični viši programski jezici
Kada se uči gramatika novog jezika (naredbe), bitno je kategorizirati njegov rječnik prema namjeni, stoga slijedi gramatika SQL-a u narednih 6 kategorija: 1. DDL (Data Definition Language) = jezik za definiranje podataka . . . CREATE TABLE, CREATE VIEW , . . .
2. DQL (Data Query Language) = jezik za ispitivanje podataka . . . SELECT . . .
3. DML (Data Manipulation Language) = jezik za upravljanje podacima . . . INSERT, DELETE, UPDATE, . . .
4. TPL (Transaction Processing Language) = jezik za obradu podataka . . . COMMIT, ROLLBACK, . . .
5. CCL (Cursor Control Language) = jezik za kontrolu kursora 6. DCL (Data Control Language) = jezik za kontrolu podataka . . . GRANT, REVOKE, . . .
Naredbe za definiranje podataka definiraju strukture tabela i pogleda, koriste se za njihovo mijenjanje, te za izradu i brisanje indeksa CREATE TABLE (kreiranje tabele baze podataka)
CREATE VIEW (kreiranje virtualne tabele – “pogleda”) pogled je nova definicija postojećeg podatka, prividna tabela koja ne sadrži podatke
CREATE INDEX (kreiranje indexa nad kombinacijom kolona tabele)
ALTER TABLE (izmjena definicije tabele)
DROP TABLE (izbacivanje tabele iz baza podataka)
Naredbe za rukovanje podacima omogućuju ažuriranje i izvještavanje iz relacijske baze podataka SELECT (prikaz sadržaja relacijske baze podataka)
UPDATE (izmjena vrijednosti u kolonama tabele)
DELETE (izbacivanje redova tabele)
INSERT (dodavanje redova u postojeću tabelu)
Naredbe za upravljanje omogućuju sigurnost, konkurentnost, oporavak i integritet relacijske baze podataka GRANT (dodjela prava korištenja vlastite tabele drugim korisnicima)
COMMIT WORK (djelovanje na bazu podataka)
REVOKE (oduzimanje prava korištenja vlastite tabele od drugih korisnika)
ROLLBACK WORK (poništavanje djelovanja)
Ključne riječi NAREDBE – glagoli koji prouzrokuju akciju, koja se izvršava (SELECT)
KVALIFIKATORI – ograničavaju opseg vrijednosti entiteta koji čine upit (WHERE)
KLAUZULE – mijenjaju akciju instrukcije (ORDER BY)
OPERATORI – poredaju vrijednosti (=, <, >)
AGREGATNE FUNKCIJE GRUPA – vraćaju jedan rezultat za skup vrijednosti (MIN())
Detaljan opis naredbi AŽURIRANJE – dodavanje, izmjena sadržaja i brisanje reda ili redova tabele:
1. 2. 3. 4.
INSERT UPDATE DELETE SELECT
sve četiri navedene naredbe moraju se primjenjivati nad istom tabelom (radi očuvanja integriteta baze podataka)
1. INSERT – postoje tri načina za unos:
1. ubacivanje vrijednosti SVIH atributa n-torke (ne specificiramo nazive atributa)
2. ubacivanje vrijednosti NEKIH atributa n-torke (specificiramo nazive atributa)
3. ubacivanje podataka iz jedne tabele u drugu (tabele moraju imati isti broj atributa koji su jednako definirani)
Opći oblik:
INSERT INTO naziv_tabele VALUES (vrijednosti atributa)
2. UPDATE – kod izmjene sadržaja tabele potrebno je paziti da vrijednost svakog atributa mijenjamo samo jednim izrazom Opći oblik: UPDATE tabela SET atribut=izraz [WHERE uvjet]
3. DELETE– brisanje (uz unaprijed zadane kriterije) Opći oblik: DELETE [FROM] tabela [WHERE uvjet]
4. SELECT – prikaz sadržaja baze podataka Opći oblik: SELECT atributi FROM tabela [WHERE uvjet]
Definiranje podataka i kontrolne funkcije
CREATE TABLE – kreiranje nove tabele potrebno je navesti ime relacije i za svaki atribut (kolonu tabele), naziv, tip, dužinu i da li su NULL vrijednosti dozvoljene
Opći oblik: CREATE TABLE ime_tabele (atr1 tip [not null], atr2 tip [not null], . . .)
nedostatak – ne definira primarni ključ, pa ni sekundarni (sekundarni ključ je kombinacija atributa, koja nije ključ u toj, nego u nekoj drugoj tabeli baze podataka)
ALTER TABLE – dodavanje novog atributa (nove kolone) postojećoj tabeli Opći oblik: ALTER TABLE tabela ADD (atr tip [, atr tip])
DROP TABLE – služi za izbacivanje tabele iz baze podataka Opći oblik: DROP TABLE tabela
razlika naredbi DROP TABLE i DELETE: naredba DELETE briše kompletan sadržaj tabele, ali ne i samu tabelu naredba DROP TABLE briše sadržaj tabele i samu tabelu
i
INDEKSI : 1. omogućuju brzi pristup kolonama koje se indeksiraju 2. omogućuju jedinstvenost vrijednosti indeksiranih kolona
(tada te kolone imaju ulogu primarnog ključa)
Opći oblik: CREATE [UNIQUE] INDEX naziv_indexa ON tabela (atribut)
indeks se izbacuje naredbom: DROP INDEKS naziv_indeksa
Sigurnost, integritet podataka
GRANT – dodjeljivanje prava korištenja vlastite tabele drugim korisnicima (sva prava ALL, svim korisnicima PUBLIC)
REVOKE – oduzimanje prava korištenja
View (pogled) Pogled – virtualna tabela (ne uzima nikakav memorijski prostor, nema svoje podatke, ali se s njim redi slično kao s običnom tabelom)
prozor kroz koji se vide podaci baze podataka
ažuriranje preko pogleda može se vršiti samo kada je pogled definiran nad jednom tabelom i ako on sadrži sve NOT NULL kolone te tabele
Prednosti korištenja pogleda
1.
jednostavnost
2.
tajnost
3.
izvedba (čuva se u kompajliranom obliku )
4.
nezavisnost podataka
Opći oblik: CREATE VIEW naziv_pogleda [(nazivi atributa)] SELECT atributi FROM . . .
Primjer
relacijski model sastavljen od dvije relacije: RADNIK (atributi: IME, POSAO, SRUKOV, DATZAP, OD, PREMIJA, SOOUR, ključ: SRADNIK) OOUR (atributi: NAZIV, GRAD, ključ: SOOUR )
atribut SOOUR relacije RADNIK omogućuje povezivanje te relacije s relacijom OOUR (vanjski, sekundarni ključ) OOUR (SOOUR, NAZIV, GRAD) RADNIK (SRADNIK, IME, POSAO, SRUKOV, DATZAP, OD, PREMIJA, SOOUR)
Relacijska shema za primjer SOOUR
NAZIV
GRAD
10
RAD_ZAJ
ZAGREB
20
PRIPREMA
OSIJEK
30
PROJEKTIRANJE
POŽEGA
40
ISTRAŽIVANJE
SPLIT
Relacijski model za primjer SRADNIK
IME
POSAO
SRUKOV
DATZAP
OD
PREMIJA
SOOUR
3069
ANITA
analitičar
3602
17-DEC-80
80 000
3199
IVANA
trg_putnik
3398
20-FEB-81
160 000
30 000
20
3221
BARICA
trg_putnik
9398
22-FEB-81
125 000
50 000
20
3266
ANITA
rukovodioc
3539
02-APR-81
297 500
3354
JASNA
trg_putnik
3398
28-SEP-81
125 000
3398
KATARINA
rukovodioc
3539
01-MAY-81
285 000
30
3482
MARCELA
rukovodioc
3539
09-JUN-81
245 000
10
3488
ŽELJKA
savjetnik
3266
09-NOV-81
300 000
20
3539
BLANKA
predsjednik
17-NOV-81
500 000
10
20
20 140 000
20
Komentar . . .
ova relacijska shema nije optimalna, jer sadrži NULL vrijednosti u koloni PREMIJA, koje je potrebno eliminirati izbacivanjem kolone PREMIJA iz tabele RADNIK i formiranjem nove relacije: TRGOVACKI_PUTNIK (SRADNIK, PREMIJA) tako PREMIJA postaje svojstvo svih radnika