5
1 PROJEKTIRANJE BAZA PODATAKA LITERATURA: SKRIPTA, potencijalno slajdovi i bilješke 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 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

predavanje 1-B2

Embed Size (px)

DESCRIPTION

java predavanje

Citation preview

Page 1: predavanje 1-B2

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

Page 2: predavanje 1-B2

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.?

Page 3: predavanje 1-B2

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

Page 4: predavanje 1-B2

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

Page 5: predavanje 1-B2

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