View
26
Download
2
Category
Preview:
DESCRIPTION
java predavanje
Citation preview
1
PROJEKTIRANJE BAZA PODATAKA
LITERATURA:SKRIPTA, potencijalno slajdovi i bilješke s predavanjaSQL Server Books OnlineGunderloy, M., Jorden, J., L. (2000) Mastering SQL Server 2000,
SYBEX, Inc. , San Francisco- bilo koja knjiga vezana uz SQL Server 20xx
Predavač: Dalibor Bužić
PROJEKTIRANJE BAZA PODATAKA
KONCEPT:• 15 predavanja po 2 sata, obavezno prisustvo 75% za redovne, 50% za
izvanredne studente• 10 laboratorijskih vježbi po 3 sata, obavezno prisustvo na 100% vježbi, ali i
100% položeni izlazni testovi• dozvoljena 2 izostanka s laboratorijskih vježbi, obavezna nadoknada krajem
semestra• dva kolokvija, minimani prolaz 50%, uvjetni prolaz min 40% (ali ukupno na
oba kolokvija min 50%)
Predviđene teme
� Transact-SQL
� Transakcije
� Rukovanje pogreškama
� Funkcije, pohranjene procedure, okidači
� Obnova u slučaju razrušenja
� Optimizacija i plan izvođenja
� Višekorisnički rad i zaključavanje
� SQL Server + VB
Baza podataka
� Što je baza podataka?� Baza podataka je organizirani skup međusobno povezanih podataka
pohranjenih u vanjskoj memoriji računala bez štetne redundance. Podaci se spremaju neovisno o aplikacijama koje ih koriste (pretražuju, uspoređuju, sortiraju, dodaju, mijenjaju, brišu...), a sva manipulacija podacima se odvija kroz kontrolirano zajedničko sučelje.
� Sustav za upravljanje bazom podataka (SUBP, eng. Database Management System ili skraćeno DBMS) je složeni programski sustav koji obavlja sve operacije nad bazom podataka, a služi kao sučelje između korisnika i zapisa baze podataka na disku. Bilo kakav pristup podacima mora proći putem SUBP-a. Baza podataka i sustav za upravljanje bazom podataka čine sustav baze podataka (slika 1.1.)
SUBP
� SUBP mora omogućiti:� opis i manipulaciju podacima pomoću jednog ili više posebnih jezika.
� Jezik za opis podataka (Data definition language, skr. DDL) služi projektantu ili administratoru baze za definiranje interne strukture baze. Njime se logički definiraju podaci i veze među podacima.
� Jezik za manipulaciju podacima (Data manipulating language, skr. DML) služi za tri osnovne operacije izmjene u bazi: dodavanje, promjena i brisanje podatka.
� Jezik za postavljanje upita (Query language, skr. QL) služi korisniku za pretraživanje baze
� Kod relacijskih baza podataka ova tri jezika su objedinjena u jedan: SQL (Structured Query Language)
� visok nivo sučelja prema korisniku, što podrazumijeva skrivanje fizičke implementacije, a znači da aplikacije moraju biti neovisne o memorijskoj lokaciji i fizičkoj strukturi podataka.
� efikasno izvođenje operacija nad podacima, što uključuje optimizaciju upita
SUBP
� SUBP mora omogućiti i:� zaštitu integriteta. To znači da SUBP mora odbiti izvršiti promjenu
nad podacima koji bi narušili konzistentnost baze� definiranje dozvola korisnicima koji će moći pristupiti točno
određenim dijelovima baze čime se štiti sigurnost baze.� istovremeni rad većeg broja korisnika bez štetnog međudjelovanja
koje bi moglo dovesti bazu u nekonzistentno stanje.� obnovu podataka u slučaju djelomičnog ili potpunog razrušenja baze
pomoću 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, pretražuje indekse, manipuira podacima, izvršava potreban kod te na kraju rezultate vraća klijentu.
� Sva obrada vrši se na serveru. Ako klijent zatraži skup podataka, server priprema tražene podatke, te šalje kopiju podataka klijentu. Originalni podaci i indeksi nikad ne napuštaju server. Ako klijent zatraži bilo kakvu izmenu podataka (unos, promjenu, brisanje), server zaprimljenu SQL naredbu zaprima i izvršava interno.
Klijent/server baze podataka
� Server za datoteke� podaci se čuvaju u datotekama, svi korisnici koji rade nad bazom
pristupaju istoj datoteci – namijenjene jednokorisničkom okruženju
� 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 pogreške ili kvara je manjaII. olakšano formiranje i provođenje sigurnostiIII. efikasnije korištenje prijenosnog opsega mrežeIV. olakšano poboljšavanje performansi bazaV. zaštita podataka (praćenje transakcija i oporavak od razrušenja)
Transact-SQL (T-SQL)
SQL – standard (ANSI SQL), ISODijalekti SQL-a
Transact-SQL – Microsoftova implementacija standarda
Je li T-SQL usklađen sa standardom?
Konvencije T-SQL-a:
VELIKIM SLOVIMA – ključne riječiidentifikatori (imena tablica, atributa, ...) – tablice 116 znakova, ostali najviše 128
- počinju slovom ili znakom _- mogu biti i više riječi, ali u [ ] ili “ ”
referenciranje objekata - ime_servera.ime_baze.ime_sheme.identifikator_objekta- jednostavnije referenciranje u ovisnosti od kontekstanpr.: Diaspar.Northwind.dbo.Customers
Transact-SQL (T-SQL) – tipovi podataka
numericexact numeric
integerbigint [-2^63, 2^63 –1]int [-2^31, 2^31-1] smallint [-2^15, 2^15 - 1] tinyint [0, 255]
bit 0 ili 1decimal 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 numericfloat [-1.79E + 308, 1.79E + 308]real [-3.40E + 38, 3.40E + 38]datetime and smalldatetime
datetime [1.1.1753, 31.12.9999] točnost 3,33 mssmalldatetime [1.1.1900, 6.6.2079] točnost 1 min
character and binary stringcharacter string
char fiksne duljine max 8000 znakovavarchar var. duljine max 8000 zn.text var. duljine max 2^31-1 zn.
Unicode character stringnchar fiksne duljine max 4000 zn.nvarchar var. duljine max 4000 zn.ntext var. duljine max 2^30 - 1 zn.
binary stringsbinary fiksne duljine max 8000 Bvarbinary var. duljine max 8000 Bimage var. duljine max 2^31 – 1 B
cursor referenca na kursorsql_variant varijabilni tip podatkatable tip podatka za tablicuuniqueidentifier (GUID)
Transact-SQL (T-SQL)
Varijable:sistemske globalne varijable –sa dva @ na početku
npr. @@CONNECTIONS, @@ERROR, ...lokalne varijable – sa jednim @ na početku
npr. @ime,...DEKLARIRANJE LOKALNIH VARIJABLI
DECLARE @ime_varijable tip_podatkaPRIDJELJIVANJE VRIJEDNOSTI
SET @ime_varijable=izraz
Funkcije:Ugrađene funkcijeKorisnički definirane
Ključna riječ GOSluži za slanje bloka naredbi SQL Serveru koji se zajedno prevode i zajedno se pravi plan izvršavanja
Transakcije
Osnovna jedinica posla nad bazom podataka.
Primjer:
1. UPDATE proizvodi SET cijena=20 , tip=“granit”WHERE naziv=“GR50*50/sivi”
- možemo 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 dođe do greške nakon 1., a što ako dođe do greške nakon 2.?
3
Transakcije
DECLARE @cijena_err int, @tip_err int
BEGIN TRANSACTIONUPDATE proizvodi SET cijena=20
WHERE naziv=“GR50*50/sivi”SET @cijena_err=@@ERRORUPDATE proizvodi SET tip=“granit”
WHERE naziv=“GR50*50/sivi”SET @tip_err=@@ERRORIF @cijena_err=0 AND @tip_err=0
COMMIT TRANSACTIONELSE
ROLLBACK TRANSACTION
Korištenje transakcija
Naredbe za rad s transakcijama:BEGIN TRAN[SACTION]COMMIT TRAN[SACTION]ROLLBACK TRAN[SACTION]SAVE TRAN[SACTION]
Naredba BEGIN TRANSACTION:- započinjanje nove transakcije
Opći oblik:BEGIN TRAN[SACTION] [ime_transakcije | @varijabla_za_ime]
[WITH MARK [‘tekst opisa’]]- ime transakcije omogućava da se transakcija referencira po imenu- opcija WITH MARK umeće u dnevnik transakcija ime i vrijeme
transakcije (pomoć pri kasnijoj obnovi ili poništavanju transakcije)
Korištenje transakcija
Naredba COMMIT TRANSACTION:- potvrđivanje transakcije- sve izmjene unutar transakcije se upisuju u bazu- COMMIT se odnosi na posljednju započetu transakciju u bloku
Opći oblik:COMMIT TRAN[SACTION] [ime_transakcije | @varijabla_za_ime] - ime transakcije služi samo za olakšano čitanje koda i nema ulogu za
potvrđivanje transakcijeUsklađeno s ANSI SQL postoji:COMMIT WORK
BEGIN TRANSACTION T1
UPDATE Kolegij SET ECTS=10 WHERE KolegijID=2
COMMIT TRANSACTION T2
Korištenje transakcija
Naredba ROLLBACK TRANSACTION:- poništavanje transakcije- sve izmjene unutar transakcije nemaju učinka – kao da se transakcija
nije niti dogodila- ROLLBACK se odnosi na posljednju započetu transakciju u bloku, na
posljednji BEGIN TRANSACTION
Opći oblik:ROLLBACK TRAN[SACTION] [ime_transakcije |
@varijabla_za_ime_transakcije | ime_potvrđene_točke | @varijabla_za_ime_potvrđene_točke]
- ime transakcije služi samo za olakšano čitanje koda i nema ulogu za poništavanje transakcije
- potvrđena točka služi ako se želi poništiti samo dio transakcijeUsklađeno s ANSI SQL postoji:ROLLBACK WORK , ALI za razliku od ROLLBACK TRANS poništava
“najvanjsku” transakciju
Korištenje transakcija
Naredba SAVE TRANSACTION:- omogućuje potvrđivanje dijela transakcije pa je moguće i poništiti dio
transakcije
Opći oblik:SAVE TRAN[SACTION] {ime_potvrđene_točke |
@varijabla_za_ime_potvrđene_točke} - ime potvrđene točke je nužno koje služi kao referenca za naredni
COMMIT ili ROLLBACK TRANSACTION
Primjer transakcije
BEGIN TRANSACTION T1UPDATE Kolegij SET ECTS=10 WHERE KolegijID=2SAVE TRANSACTION SPREMDELETE Kolegij WHERE KolegijID=5ROLLBACK TRANSACTION SPREM
COMMIT TRANSACTION
4
Primjer transakcije
DECLARE @cijena_err int, @tip_err int
BEGIN TRANSACTIONUPDATE proizvodi SET cijena=20
WHERE naziv=“GR50*50/sivi”SET @cijena_err=@@ERRORSAVE TRANSACTION cijenaspremljenaUPDATE proizvodi SET tip=“granit”
WHERE naziv=“GR50*50/sivi”SET @tip_err=@@ERRORIF @tip_err<>0
ROLLBACK TRANSACTION cijenaspremljenaIF @cijena_err=0 AND @tip_err=0
BEGINCOMMIT TRANSACTIONPRINT ‘Izmjene su uspješno unesene!’
ENDELSE
ROLLBACK TRANSACTION
Korištenje transakcija
Transakcije se mogu ugnježđivati- BEGIN TRANSACTION se može zadati prije nego se prethodna
transakcija potvrdi ili poništi- Unutrašnja se transakcija mora potvrditi prije vanjske- ROLLBACK unutrašnje transakcije se ne može napraviti- COMMIT unutrašnje transakcije potvrđuje samo unutrašnju
transakciju, ali to ne znači da su podaci trajno izmijenjeni u bazi, već samo da su vidljivi vanjskoj transakciji
- Ako vanjska transakcija napravi ROLLBACK sve izmjene u unutrašnjim transakcijama se poništavaju
Korisne sistemske varijable:- @@TRANCOUNT- broj ugnježđenih transakcija koje su trenutno
započete, ako nema započetih transakcija iznos je 0- @@ERROR – sadrži 0 ako prethodni iskaz nije prouzrokovao grešku,
u suprotnom ima vrijednost rednog broja posljednje greške
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 T1UPDATE Kolegij SET ECTS=10 WHERE KolegijID=2BEGIN TRANSACTION T2
DELETE Kolegij WHERE KolegijID=5SAVE TRANSACTION sacuvaj_brisanjeDELETE Kolegij WHERE KolegijID=4ROLLBACK TRANSACTION sacuvaj_brisanjeUPDATE Kolegij SET ECTS=20 WHERE KolegijID=3
COMMIT TRANSACTION T2INSERT INTO Kolegij (Naziv,ECTS) VALUES ('Tehnički engleski jezik',3)
COMMIT TRANSACTION T1
@@TRANCOUNT
SELECT @@TRANCOUNT -- ispisuje 0BEGIN TRAN A
SELECT @@TRANCOUNT -- ispisuje 1BEGIN TRAN B
SELECT @@TRANCOUNT -- ispisuje 2BEGIN TRAN C
SELECT @@TRANCOUNT -- ispisuje 3COMMIT TRAN C
COMMIT TRAN BSELECT @@TRANCOUNT -- ispisuje 1
COMMIT TRAN ASELECT @@TRANCOUNT -- ispisuje 0
Svojstva transakcija
Transakcije imaju 4 svojstva (ACID):
� Atomicity (Atomarnost)
- transakcija je jedinstvena jedinica posla (atom)- nakon što transakcija završi ili su obavljene sve operacije ili niti jedna
� Consistency (Konzistentnost)
- transakcija bazu mora ostaviti u konzistentno stanju- ako neka operacija naruši neka od pravila ili ograničenja u bazi, transakcija se ne može potvrditi
5
Svojstva transakcija
� Durability (Trajnost)
- transakcija kada se jednom potvrdi mora ostati trajno u bazi- ako se računalo pokvari, rezultati potvrđene transakcije su vidljivi kada se računalo 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
Korištenje transakcija
Transakcije troše resurse!
Savjeti za upotrebu:- Unutar transakcije se ne smije čekati intervencija korisnika – podaci
bi mogli biti predugo zaključani za upotrebu- Ne započinjati transakcije zbog jednog SQL upita- Unutar jedne transakcije mijenjajti što manju količinu podataka- Transakciju započinjati tek kada je korisnik spreman ažurirati
podatke, a ne dok ih pretražuje- Transakcije trebaju biti što kraće
Recommended