Baze podataka i aplikacije Uvod Klijent server arhitektura
Baze podataka i aplikacije
Uvod � Klijent server arhitektura � SUBP – serverska strana � Aplikacija koristi BP – klijentska strana 2
Integrisana okruženja � Klijent i server su jedno � Primer Access-a i MS Jet. DB � Sve je u jednom fajlu � Platformska zavisnost 3
Integrisana okruženja 4
Integrisana okruženja 5
Integrisana okruženja 6
Integrisana okruženja 7
Integrisana okruženja � Raslojavanje po potrebi 8
Slojevita struktura aplikacija � Pojavom OOP omogućeno je: ◦ razdvajanje podataka od logike njihove obrade ◦ razdvajanje podataka od interfejsa prema korisnicima podataka. � Aplikacije se grade od objekata � Objekti preuzimaju odovornost za obavljanje specifičnih funkcionalnosti aplikacije 9
Slojevita struktura aplikacija � Primeri: ◦ Grupa objekata od kojih se gradi korisnički interfejs ◦ Grupa objekata koji ostvaruju konekciju na BP, izvršavaju upite i prihvataju rezultate upita � Objekti međusobno komuniciraju preko funkcionalnih poziva � Objekti mogu biti fizički razdvojeni (na različitim računarskim platformama ◦ Za takve aplikacije kažemo da su ditribuirane 10
Slojevita struktura aplikacija � Raslojavanje aplikacije - odvajanje njenih delova prema funkcionalnosti � Slojevi – grupisani objekti srodnih funkcionalnosti � Pravilo dobrog dizajna aplikacija: ◦ između objekata (klasa) u istom sloju treba da se postigne visoka kohezija (high cohesion), ◦ slaba sprega između slojeva (low coupling). 11
Slojevita struktura aplikacija � Osnovni aplikacioni model je troslojni model ◦ Prezentcioni sloj (presentation layer) ◦ Sloj poslovne logike (buisness logic layer) ◦ Sloj podataka (data layer) 12
Slojevita struktura aplikacija 13
Slojevita struktura aplikacija � � Aplikacije mogu imati više od tri sloja Podaci mogu biti razdvojeni na više različitih mesta ◦ Rasterećenje hardverskih (serverskih) platformi � � Više nivoa obrade Primer: Web aplikacije 14
Slojevita struktura aplikacija 15
Slojevita struktura aplikacija � � ◦ ◦ ◦ Aplikacije servisi (nezavisne softverske komponente ) Web servisi su zasnovani na tri osnovna standarda: XML – extensible markup language - (za prikazivanje podataka), SOAP – simple object access protokol (za razmenu podataka između davalaca i korisnika servisa) i, WSDL – Web Service Definition Language - za potrebe opisa servisa, definisan je poseban jezik 16
Slojevita struktura aplikacija Tri komponente Web servisa: Davalac servisa, korisnik servisa, provajder Web servisi omogućavaju: Povezivanje različitih aplikacija, tehnologija i računarskih platformi 17
Pristup BP � Specifičnosti pristupa BP iz različitih slojeva ◦ Pristup podacima iz prezentacionog sloja ◦ Pristup podacima iz sloja poslovne logike ◦ Pristup iz sloja podataka 18
Pristupa BP - Prezentacioni sloj � � Prezentacioni sloj sadrži objekte koriničkog interfejsa Uokvireni prozori sa naslovnom linijom koji sadrže kontrole za interakciju sa korisnikom 19
Pristupa BP - Prezentacioni sloj - 20
Pristupa BP - Prezentacioni sloj - 1: Private Sub Form_Close() 2: Do. Cmd. Run. SQL "UPDATE Kolicine. Sred SET [KOLIC] = 3: Forms![TSredstva]![Rec. Sum] WHERE Kolicine. Sred. ID_BR = 4: Forms![TSredstva]![ID_BR] AND 5: Kolicine. Sred. Sif. Dug=Forms![TSredstva]![Sif. Dug]; " 6: End Sub VBA skripta koja sadrži SQL naredbu 21
Pristupa BP - Prezentacioni sloj - 22
Pristupa BP - Prezentacioni sloj - 23
- Prezentacioni sloj 1: <html> 2: <body> 3: <% 4: set conn=Server. Create. Object("ADODB. Connection") 5: conn. Provider="Microsoft. Jet. OLEDB. 4. 0"6: conn. Open "d: /webdata/partneri. mdb“ 7: sql="INSERT INTO kupci (naz_firme, adresa, postbroj)"8: sql=sql & " VALUES “ 9: sql=sql & "('" & Request. Form("firma") & "', “ 10: sql=sql & "'" & Request. Form("adresa") & "', “ 11: sql=sql & "'" & Request. Form("postkod") & "')“ 12: on error resume next 13: conn. Execute sql, recaffected 14: if err<>0 then 15: Response. Write("Nemate prava na dodavanje podataka!") 16: else 17: Response. Write("<h 3>Klijent " & Request. Form("firma") 18: & " je dodat</h 3>") 19: end if 20: conn. close 21: %> 22: </body> 23: </html> Pristup BP iz ASP (Active Server Pages) stranice 24
Pristupa BP - Prezentacioni sloj - 1: <sql: query var="upit 1"> 2: SELECT * FROM moja_tabela 3: </sql: query> 4: <c: for. Each var="naziv_polja" items="${upit 1. column. Names}"> 5: <th><c: out value="${naziv_polja}"/></th> 6: </c: for. Each>7: <c: for. Each var="red" items="${upit 1. rows}"> 8: <tr> 9: <c: for. Each var="kolona" items="${red}"> 10: <td><c: out value="${kolona. value}"/></td> 11: </c: for. Each> 12: </tr> 13: </c: for. Each> Posebno dizajnirani tag-ovi za pristupanje BP iz prezentacionog sloja 25
Pristupa BP - Prezentacioni sloj 1: mysql_connect(“localhost", $username, $password); 2: @mysql_select_db("biblioteka") or die( "Nema konekcije sa BP"); 3: $result = mysql_query("SELECT * FROM knjige"); 4: $num = mysql_numrows($result); 5: mysql_close(); 6: $i=0; 7: while ($i < $num) { 8: $naslov = mysql_result($result, $i, "naslov"); 9: $autor = mysql_result($result, $i, "autor"); 10: $i++; 11: } Pristupanje BP iz PHP stranice 26
Pristup BP - sloj poslovne logike � Najčešće korišćen pristup kod višeslojnih aplikacija � Entiteti (klase ili moduli) zaduženi za komunikciju sa BP � Uslužne klase koje omogućavaju interakciju sa BP � CDatabase, CRecordset klase iz Microsoft (MFC) � Result. Set, Connection klase u Java-inom paketu java. sql. * 27
Pristup BP - sloj poslovne logike - 28
Pristup BP - sloj poslovne logike - C++ kod koji preuzima nazive proizvoda iz tabele u BP i dodaje ih u listu proizvoda u korisničkom interfejsu 29
Pristup BP - sloj poslovne logike - Java kod koji u tabelu t_mtutor_groups u BP dodaje novi zapis (novi naziv grupe) 30
Pristup BP - sloj podataka � Izmeštanje SQL naredbi iz izvornog koda aplikacije u SUBP 31
Pristup BP - sloj podataka � Ugnježdene procedures) procedure (stored ◦ Skupovi instrukcija koje se često koriste ◦ Njihovom upotrebom programeri se oslobađaju višestrukih pozivanja istih komandi ◦ Najbrže se izvršavaju jer se proces prevođenja instrukcija vrši na SQL serveru ◦ Procedure se nalaze na jednom mestu, a ne na više mesta u aplikacijama (npr. na frontend kraju – prezentacioni sloj), pa je njihova izmena i ažuriranje mnogo lakše 32
Pristup BP - sloj podataka � Ugnježdene procedure (stored procedures) ◦ Kada se izvrši procedura, samo rezultat obrade se šalje ka sledećem sloju �Najmanje opterećenje mreže, poboljšanje performansi ◦ Procedurama se mogu prosleđivati parametri i promenljive ◦ Procedure se mogu pozivati i iz drugih procedura � Najčešće se pišu u nekom od proširenja jezika SQL koje definiše proizvođač konkretnog DBMS ◦ Oracle – PL/SQL ◦ Microsoft SQL Server – Tansact-SQL 33
Pristup BP - sloj podataka � Preduslov - SUBP mora da poseduje mogućnosti kreiranja procedura � SQL naredbe se ugnježdavaju kao procedure (stored procedure) u ciljnu BP 1: CREATE PROCEDURE `sp. Used. Test. Sets`(IN u_id INTEGER(11)) 2: BEGIN 3: SELECT * FROM `t_mtutor_used_test_sets` WHERE ( user_id = u_id ); 4: END; 34
Pristup BP - sloj podataka � Poziv 1: 2: 3: 4: 5: 6: 7: ugnježdenih procedura cs = conn. prepare. Call("{call sp. Used. Test. Sets(? )}"); cs. set. Int("user_id", u_id); rs = cs. execute. Query(); while( rs. next() ){ int test_id = rs. get. Int("test_set_id"); Date test_dat = rs. get. Date("date"); } 35
Pristup BP - sloj podataka � Trigeri, okidači (triggers) ◦ Programska procedura u okviru SUBP, koja se aktivira određenim događajem: �upis novog zapisa u tabelu �brisanje određenog zapisa �modifikacija postojećeg zapisa � Triger predstavlja jedan od mehanizama za proveru uslova integriteta baze podataka ◦ Npr. Pre upisa u tabelu dobavljač-artikal proveriti da li dobavljač dobavlja dati proizvod 36
Pristup BP - sloj podataka � Trigeri, okidači (triggers) ◦ Triger pokreće određenu aktivnost nad bazom, uvek kada se desi jedan od navedenih događaja ◦ Tačnije rečeno, SUBP inicira izvršenje okidača, odmah po nastajanju događaja ◦ Rad okidača je van kontrole aplikativnog programa koji je vezan na SUBP, a obavezno se izvršava 37
Pristup BP - sloj podataka � Trigeri, okidači (triggers) ◦ Sintaksa trigera je sledeća: �Tip može biti: BEFORE, AFTER i INSTEAD OF ◦ CREATE [OR REPLACE] TRIGGER /naziv_trigera/ /tip trigera/ ON /naziv tabele/ BEGIN /izvrsne_instrukcije_trigera/ END 38
Pristup BP - sloj podataka � Trigeri, okidači (triggers) ◦ Oracle ima trigere koji se aktiviraju i kada se menja šema RBP ◦ Schema-level triggers �After Creation �Before Alter �After Alter �Before Drop �After Drop �Before Logoff �After Logon 39
Razmena podataka između BP i aplikacija - ODBC � Pre kreiranja aplikacije potrebno je izvršiti registrovanje BP kojoj se pristupa posredstvom ODBC drajvera. � Registracija je obavezna bez obzira na tip BP � U Windows-ovom kontrol-panelu se bira ikonica ODBC, pri čemu se otvara administatorski dijalog prozor 40
Razmena podataka između BP i aplikacija - ODBC Dodavanje novog ODBC veznika 41
Razmena podataka između BP i aplikacija - ODBC Izbor ODBC drajvera 42
Razmena podataka između BP i aplikacija - ODBC Zadavanje imena ODBC izvora podataka Izbor BP 43
Razmena podataka između BP i aplikacija - ODBC - Izbor BP 44
� Dalje Razmena podataka između BP i aplikacija - ODBC - se kreiraju brokerske klase koje koriste ODBC preko datog naziva, da bi uspostavile interakciju sa podacima u BP Naziv ODBC-a Naziv tabele Povezivanje polja u tabeli sa podacima u brokerskoj klasi 45
Razmena podataka između BP i aplikacija � JDBC (Java DB Connectivity) 46
Razmena podataka između BP i aplikacija - JDBC � Posredstvom JDBC-a je moguće dobiti informacije o: ◦ strukturi baze podataka i njenih tabela � Posredstvom klase Database. Meta. Data je moguće dobiti informacije o strukturi baze 47
Razmena podataka između BP i aplikacija - JDBC � Moguće ◦ ◦ ◦ je dobiti detaljne informacije o: tabelama, ograničenjima, uskladištenim procedurama, user-ima, JDBC drajveru pomoću kojega je uspostavljena konekcija. . . 48
Razmena podataka između BP i aplikacija - JDBC � Klasa Result. Set. Meta. Data može da posluži kao izvor detaljnih informacija o: ◦ ◦ broju kolona, nazivu svake od njih, tipu, dužini polja. . . 49
Razmena podataka između BP i aplikacija - JDBC � Ova klasa takođe poseduje veliki broj metoda od kojih su najvažnije: ◦ int get. Column. Count() – vraća broj kolona ◦ String get. Column. Label(int i) – vraća naziv ite kolone ◦ int get. Column. Type(int i) – vraća tip i-te kolone 50
- Slides: 50