predavanje 1-B2

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