You are on page 1of 5

1

PROJEKTIRANJE BAZA PODATAKA


LITERATURA:
SKRIPTA, potencijalno slajdovi i biljeke s predavanja
SQL Server Books Online
Gunderloy, M., Jorden, J., L. (2000) Mastering SQL Server 2000,
SYBEX, Inc. , San Francisco
- bilo koja knjiga vezana uz SQL Server 20xx
Predava: Dalibor Bui
PROJEKTIRANJE BAZA PODATAKA
KONCEPT:
15 predavanja po 2 sata, obavezno prisustvo 75% za redovne, 50% za
izvanredne studente
10 laboratorijskih vjebi po 3 sata, obavezno prisustvo na 100% vjebi, ali i
100% poloeni izlazni testovi
dozvoljena 2 izostanka s laboratorijskih vjebi, obavezna nadoknada krajem
semestra
dva kolokvija, minimani prolaz 50%, uvjetni prolaz min 40% (ali ukupno na
oba kolokvija min 50%)
Predviene teme
Transact-SQL
Transakcije
Rukovanje pogrekama
Funkcije, pohranjene procedure, okidai
Obnova u sluaju razruenja
Optimizacija i plan izvoenja
Viekorisniki rad i zakljuavanje
SQL Server + VB
Baza podataka
to je baza podataka?
Baza podataka je organizirani skup meusobno povezanih podataka
pohranjenih u vanjskoj memoriji raunala bez tetne redundance.
Podaci se spremaju neovisno o aplikacijama koje ih koriste (pretrauju,
usporeuju, sortiraju, dodaju, mijenjaju, briu...), a sva manipulacija
podacima se odvija kroz kontrolirano zajedniko suelje.
Sustav za upravljanje bazom podataka (SUBP, eng. Database
Management System ili skraeno DBMS) je sloeni programski sustav
koji obavlja sve operacije nad bazom podataka, a slui kao suelje
izmeu korisnika i zapisa baze podataka na disku. Bilo kakav pristup
podacima mora proi putem SUBP-a. Baza podataka i sustav za
upravljanje bazom podataka ine sustav baze podataka (slika 1.1.)
SUBP
SUBP mora omoguiti:
opis i manipulaciju podacima pomou jednog ili vie posebnih jezika.
Jezik za opis podataka (Data definition language, skr. DDL) slui
projektantu ili administratoru baze za definiranje interne strukture baze.
Njime se logiki definiraju podaci i veze meu podacima.
Jezik za manipulaciju podacima (Data manipulating language, skr. DML)
slui za tri osnovne operacije izmjene u bazi: dodavanje, promjena i
brisanje podatka.
Jezik za postavljanje upita (Query language, skr. QL) slui korisniku za
pretraivanje baze
Kod relacijskih baza podataka ova tri jezika su objedinjena u jedan: SQL
(Structured Query Language)
visok nivo suelja prema korisniku, to podrazumijeva skrivanje
fizike implementacije, a znai da aplikacije moraju biti neovisne o
memorijskoj lokaciji i fizikoj strukturi podataka.
efikasno izvoenje operacija nad podacima, to ukljuuje
optimizaciju upita
SUBP
SUBP mora omoguiti i:
zatitu integriteta. To znai da SUBP mora odbiti izvriti promjenu
nad podacima koji bi naruili konzistentnost baze
definiranje dozvola korisnicima koji e moi pristupiti tono
odreenim dijelovima baze ime se titi sigurnost baze.
istovremeni rad veeg broja korisnika bez tetnog meudjelovanja
koje bi moglo dovesti bazu u nekonzistentno stanje.
obnovu podataka u sluaju djelominog ili potpunog razruenja baze
pomou sigurnosnih kopija
2
Klijent/server baze podataka
U klijent/server bazi, klijent priprema SQL zahtjev i alje ga serveru koji
zahtjev ita i obradi. Server provjerava sigurnost, pretrauje indekse,
manipuira podacima, izvrava potreban kod te na kraju rezultate vraa
klijentu.
Sva obrada vri se na serveru. Ako klijent zatrai skup podataka, server
priprema traene podatke, te alje kopiju podataka klijentu. Originalni
podaci i indeksi nikad ne naputaju server. Ako klijent zatrai bilo kakvu
izmenu podataka (unos, promjenu, brisanje), server zaprimljenu SQL
naredbu zaprima i izvrava interno.
Klijent/server baze podataka
Server za datoteke
podaci se uvaju u datotekama, svi korisnici koji rade nad bazom
pristupaju istoj datoteci namijenjene jednokorisnikom
okruenju
Access, Microsoft FoxPro
Klijent/server baze podataka
pristup podacima kontrolira glavni program koji se naziva server
kada eli koristiti podatke klijent (aplikacija) alje zahtjev serveru
sve operacije s podacima obavljaju se preko servera
Microsoft SQL Server, Oracle, Informix
Prednosti klijent/server baze podataka
I. vjerojatnost pogreke ili kvara je manja
II. olakano formiranje i provoenje sigurnosti
III. efikasnije koritenje prijenosnog opsega mree
IV. olakano poboljavanje performansi baza
V. zatita podataka (praenje transakcija i oporavak od razruenja)
Transact-SQL (T-SQL)
SQL standard (ANSI SQL), ISO
Dijalekti SQL-a
Transact-SQL Microsoftova implementacija standarda
Je li T-SQL usklaen sa standardom?
Konvencije T-SQL-a:
VELIKIM SLOVIMA kljune rijei
identifikatori (imena tablica, atributa, ...) tablice 116 znakova, ostali najvie 128
- poinju slovom ili znakom _
- mogu biti i vie rijei, ali u [ ] ili
referenciranje objekata - ime_servera.ime_baze.ime_sheme.identifikator_objekta
- jednostavnije referenciranje u ovisnosti od konteksta
npr.: Diaspar.Northwind.dbo.Customers
Transact-SQL (T-SQL) tipovi podataka
numeric
exact numeric
integer
bigint [-2^63, 2^63 1]
int [-2^31, 2^31-1]
smallint [-2^15, 2^15 - 1]
tinyint [0, 255]
bit 0 ili 1
decimal and numeric
decimal [-10^38 +1, 10^38 1]
numeric [-10^38 +1, 10^38 1]
money and smallmoney
money [-2^63, 2^63 - 1]
smallmoney [-214,748.3648 , 214,748.3647]
approximate numeric
float [-1.79E + 308, 1.79E + 308]
real [-3.40E + 38, 3.40E + 38]
datetime and smalldatetime
datetime [1.1.1753, 31.12.9999] tonost 3,33 ms
smalldatetime [1.1.1900, 6.6.2079] tonost 1 min
character and binary string
character string
char fiksne duljine max 8000 znakova
varchar var. duljine max 8000 zn.
text var. duljine max 2^31-1 zn.
Unicode character string
nchar fiksne duljine max 4000 zn.
nvarchar var. duljine max 4000 zn.
ntext var. duljine max 2^30 - 1 zn.
binary strings
binary fiksne duljine max 8000 B
varbinary var. duljine max 8000 B
image var. duljine max 2^31 1 B
cursor referenca na kursor
sql_variant varijabilni tip podatka
table tip podatka za tablicu
uniqueidentifier (GUID)
Transact-SQL (T-SQL)
Varijable:
sistemske globalne varijable sa dva @ na poetku
npr. @@CONNECTIONS, @@ERROR, ...
lokalne varijable sa jednim @ na poetku
npr. @ime,...
DEKLARIRANJE LOKALNIH VARIJABLI
DECLARE @ime_varijable tip_podatka
PRIDJELJIVANJE VRIJEDNOSTI
SET @ime_varijable=izraz
Funkcije:
Ugraene funkcije
Korisniki definirane
Kljuna rije GO
Slui za slanje bloka naredbi SQL Serveru koji se zajedno prevode i
zajedno se pravi plan izvravanja
Transakcije
Osnovna jedinica posla nad bazom podataka.
Primjer:
1. UPDATE proizvodi SET cijena=20 , tip=granit
WHERE naziv=GR50*50/sivi
- moemo napisati kao dva upita:
2. UPDATE proizvodi SET cijena=20
WHERE naziv=GR50*50/sivi
UPDATE proizvodi SET tip=granit
WHERE naziv=GR50*50/sivi
to ako doe do greke nakon 1., a to ako doe do greke nakon
2.?
3
Transakcije
DECLARE @cijena_err int, @tip_err int
BEGIN TRANSACTION
UPDATE proizvodi SET cijena=20
WHERE naziv=GR50*50/sivi
SET @cijena_err=@@ERROR
UPDATE proizvodi SET tip=granit
WHERE naziv=GR50*50/sivi
SET @tip_err=@@ERROR
IF @cijena_err=0 AND @tip_err=0
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
Koritenje transakcija
Naredbe za rad s transakcijama:
BEGIN TRAN[SACTION]
COMMIT TRAN[SACTION]
ROLLBACK TRAN[SACTION]
SAVE TRAN[SACTION]
Naredba BEGIN TRANSACTION:
- zapoinjanje nove transakcije
Opi oblik:
BEGIN TRAN[SACTION] [ime_transakcije | @varijabla_za_ime]
[WITH MARK [tekst opisa]]
- ime transakcije omoguava da se transakcija referencira po imenu
- opcija WITH MARK umee u dnevnik transakcija ime i vrijeme
transakcije (pomo pri kasnijoj obnovi ili ponitavanju transakcije)
Koritenje transakcija
Naredba COMMIT TRANSACTION:
- potvrivanje transakcije
- sve izmjene unutar transakcije se upisuju u bazu
- COMMIT se odnosi na posljednju zapoetu transakciju u bloku
Opi oblik:
COMMIT TRAN[SACTION] [ime_transakcije | @varijabla_za_ime]
- ime transakcije slui samo za olakano itanje koda i nema ulogu za
potvrivanje transakcije
Usklaeno s ANSI SQL postoji:
COMMIT WORK
BEGIN TRANSACTION T1
UPDATE Kolegij SET ECTS=10 WHERE KolegijID=2
COMMIT TRANSACTION T2
Koritenje transakcija
Naredba ROLLBACK TRANSACTION:
- ponitavanje transakcije
- sve izmjene unutar transakcije nemaju uinka kao da se transakcija
nije niti dogodila
- ROLLBACK se odnosi na posljednju zapoetu transakciju u bloku, na
posljednji BEGIN TRANSACTION
Opi oblik:
ROLLBACK TRAN[SACTION] [ime_transakcije |
@varijabla_za_ime_transakcije | ime_potvrene_toke |
@varijabla_za_ime_potvrene_toke]
- ime transakcije slui samo za olakano itanje koda i nema ulogu za
ponitavanje transakcije
- potvrena toka slui ako se eli ponititi samo dio transakcije
Usklaeno s ANSI SQL postoji:
ROLLBACK WORK , ALI za razliku od ROLLBACK TRANS ponitava
najvanjsku transakciju
Koritenje transakcija
Naredba SAVE TRANSACTION:
- omoguuje potvrivanje dijela transakcije pa je mogue i ponititi dio
transakcije
Opi oblik:
SAVE TRAN[SACTION] {ime_potvrene_toke |
@varijabla_za_ime_potvrene_toke}
- ime potvrene toke je nuno koje slui kao referenca za naredni
COMMIT ili ROLLBACK TRANSACTION
Primjer transakcije
BEGIN TRANSACTION T1
UPDATE Kolegij SET ECTS=10 WHERE KolegijID=2
SAVE TRANSACTION SPREM
DELETE Kolegij WHERE KolegijID=5
ROLLBACK TRANSACTION SPREM
COMMIT TRANSACTION
4
Primjer transakcije
DECLARE @cijena_err int, @tip_err int
BEGIN TRANSACTION
UPDATE proizvodi SET cijena=20
WHERE naziv=GR50*50/sivi
SET @cijena_err=@@ERROR
SAVE TRANSACTION cijenaspremljena
UPDATE proizvodi SET tip=granit
WHERE naziv=GR50*50/sivi
SET @tip_err=@@ERROR
IF @tip_err<>0
ROLLBACK TRANSACTION cijenaspremljena
IF @cijena_err=0 AND @tip_err=0
BEGIN
COMMIT TRANSACTION
PRINT Izmjene su uspjeno unesene!
END
ELSE
ROLLBACK TRANSACTION
Koritenje transakcija
Transakcije se mogu ugnjeivati
- BEGIN TRANSACTION se moe zadati prije nego se prethodna
transakcija potvrdi ili poniti
- Unutranja se transakcija mora potvrditi prije vanjske
- ROLLBACK unutranje transakcije se ne moe napraviti
- COMMIT unutranje transakcije potvruje samo unutranju
transakciju, ali to ne znai da su podaci trajno izmijenjeni u bazi, ve
samo da su vidljivi vanjskoj transakciji
- Ako vanjska transakcija napravi ROLLBACK sve izmjene u
unutranjim transakcijama se ponitavaju
Korisne sistemske varijable:
- @@TRANCOUNT- broj ugnjeenih transakcija koje su trenutno
zapoete, ako nema zapoetih transakcija iznos je 0
- @@ERROR sadri 0 ako prethodni iskaz nije prouzrokovao greku,
u suprotnom ima vrijednost rednog broja posljednje greke
Primjer transakcije
BEGIN TRANSACTION T1
UPDATE Kolegij SET ECTS=10 WHERE KolegijID=2
BEGIN TRANSACTION T2
DELETE Kolegij WHERE KolegijID=5
COMMIT TRANSACTION T2
UPDATE Kolegij SET ECTS=20 WHERE KolegijID=3
ROLLBACK TRANSACTION T1
Primjer transakcije
BEGIN TRANSACTION T1
UPDATE Kolegij SET ECTS=10 WHERE KolegijID=2
BEGIN TRANSACTION T2
DELETE Kolegij WHERE KolegijID=5
SAVE TRANSACTION sacuvaj_brisanje
DELETE Kolegij WHERE KolegijID=4
ROLLBACK TRANSACTION sacuvaj_brisanje
UPDATE Kolegij SET ECTS=20 WHERE KolegijID=3
COMMIT TRANSACTION T2
INSERT INTO Kolegij (Naziv,ECTS) VALUES ('Tehniki engleski jezik',3)
COMMIT TRANSACTION T1
@@TRANCOUNT
SELECT @@TRANCOUNT -- ispisuje 0
BEGIN TRAN A
SELECT @@TRANCOUNT -- ispisuje 1
BEGIN TRAN B
SELECT @@TRANCOUNT -- ispisuje 2
BEGIN TRAN C
SELECT @@TRANCOUNT -- ispisuje 3
COMMIT TRAN C
COMMIT TRAN B
SELECT @@TRANCOUNT -- ispisuje 1
COMMIT TRAN A
SELECT @@TRANCOUNT -- ispisuje 0
Svojstva transakcija
Transakcije imaju 4 svojstva (ACID):
Atomicity (Atomarnost)
- transakcija je jedinstvena jedinica posla (atom)
- nakon to transakcija zavri ili su obavljene sve
operacije ili niti jedna
Consistency (Konzistentnost)
- transakcija bazu mora ostaviti u konzistentno stanju
- ako neka operacija narui neka od pravila ili ogranienja
u bazi, transakcija se ne moe potvrditi
5
Svojstva transakcija
Durability (Trajnost)
- transakcija kada se jednom potvrdi mora ostati trajno u
bazi
- ako se raunalo pokvari, rezultati potvrene transakcije
su vidljivi kada se raunalo ponovo pokrene
Isolation (Izolacija)
- jedna transakcija ne vidi prijelazno stanje drugih
transakcija
- ako se na nepromijenjenim podacima izvedu sve
transakcije jednakim redoslijedom efekt uvijek mora biti
jednak
Koritenje transakcija
Transakcije troe resurse!
Savjeti za upotrebu:
- Unutar transakcije se ne smije ekati intervencija korisnika podaci
bi mogli biti predugo zakljuani za upotrebu
- Ne zapoinjati transakcije zbog jednog SQL upita
- Unutar jedne transakcije mijenjajti to manju koliinu podataka
- Transakciju zapoinjati tek kada je korisnik spreman aurirati
podatke, a ne dok ih pretrauje
- Transakcije trebaju biti to krae

You might also like