Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

PySBQL Język zapytań dla obiektowych baz danych. Aplikacje bazodanowe Główny nurt budowania aplikacji opiera się na połączeniu: SQL JDBC Java Jak wyświetlić

Podobne prezentacje


Prezentacja na temat: "PySBQL Język zapytań dla obiektowych baz danych. Aplikacje bazodanowe Główny nurt budowania aplikacji opiera się na połączeniu: SQL JDBC Java Jak wyświetlić"— Zapis prezentacji:

1 PySBQL Język zapytań dla obiektowych baz danych

2 Aplikacje bazodanowe Główny nurt budowania aplikacji opiera się na połączeniu: SQL JDBC Java Jak wyświetlić pensję Kowalskiego?

3 SQL+JDBC+Java Connection conn; ResultSet R; Statement s;... s=conn.createQuery();... R=s.executeQuery( "SELECT salary FROM empl WHERE sname = 'SMITH'"); while (R.next()){ System.out.println (R.getString(1)); }

4 Obiektowe bazy danych Grupa OMG w roku 1991 powołuje ODMG ODMG tworzy specyfikacje kolejnych wersji języka OQL Oparty o algebrę obiektową Brak konstrukcji imperatywnych Brak abstrakcji proceduralnych Niespójna semantyka W roku 2001 grupa ODMG zostaje rozwiązana

5 Obiektowe bazy danych 1990 r. System LOQIS z prototypowym językiem opartym o podejście stosowe (SBA) Początek 2006 r.– reaktywacja ODMG w celu ustanowienia standardu języków zapytań. Rozważany jest standard oparty o podejście stosowe

6 SBA i SBQL Lata 90-te, Kazimierz Subieta z IPIPAN Stos środowisk ENVS Bindery Struktura dynamiczna Uczestniczy w przetwarzaniu operatorów niealgebraicznych Jedno środowisko może zawierać wiele binderów o danej nazwie empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) ENVS var1(string)... currentDate(...)...

7 Główne zalety SBA Ujednolicona architektura Uwolnienie od algebr Algorytmiczne definiowanie języka Precyzja w definiowaniu semantyki Możliwość bezpośredniej implementacji definicji Język zapytań traktowany jak język programowania

8 Modele danych SBA i koncepcja SBQL są niezależne od modelu danych Możliwość zaadoptowania do modelu relacyjnego, XML, abstrakcyjnych modelów obiektowych, itp. Implementacja oparta na konkretnym modelu

9 Model danych M0 i 1 empl i 2 fname John i 5 salary 2000 i 4 dept i 20 dept i 21 name IT i 22 employee i 3 sname Smith i 6 empl i 7 fname Bob i 9 salary 2300 i 10 dept i 8 sname Gordon i 11 empl i 13 dept i 12 sname Smith i 23 employee i 24 boss i 25 dept i 26 name Marketing i 27 employee i 28 boss R = { i 1, i 6, i 11, i 20, i 25 }

10 XML a M0

11 Model relacyjny a M0 Schemat relacyjny: Osoba(Imię, Nazwisko, DataUr) Relacja Osoba: ImięNazwiskoDataUr JanNowak AdamKowalski

12 Model danych M1 Relacja CC Nie zawiera cykli Relacja OC Zbiór C i 40 PersonClass i 41 age (...code...)... i 51 changeSal (...code...)... i 50 EmplClass i 52 netSal (...code...) Dziedziczy po

13 Rezultaty dla modelu M1 Rezultatem może być: Wartość atomowa (liczba, znak, itp.) Referencja do obiektu Krotki, słowniki i listy rezultatów Bindery

14 Dlaczego Python? - Bruce Eckel 10. Reduced Clutter 9. Its not backward-compatible in exchange for pain 8. It doesnt value performance over my productivity 7. It doesnt treat me like Im stupid 6. I dont wait forever for a full implementation of the language

15 Dlaczego Python? - Bruce Eckel 5. It doesnt make assumptions about how we discover errors 4. Marketing people are not involved 3. I dont have to type so much 2. My guesses are usually right 1. Python lets me focus on concepts

16 Dynamiczne typy #include using namespace std; template R sum(A a, B b) { return a + b; } int main() { string a("one"), b("two") cout (a, b) << endl; cout (1, 2) << endl; }

17 interface addable { Object add(Object b);} class X implements addable { public Object add(Object b) { return new Object(); // Test } class AddableNotFoundException extends Exception {} public class WeakTyping { public static Object sum(Object a, Object b) throws AddableNotFoundException { Class[] intfs = a.getClass().getInterfaces(); for(int i = 0; i < intfs.length; i++) if(intfs[i] == addable.class) return ((addable)a).add(b); throw new AddableNotFoundException(); } public static void main(String[] args) throws Exception { X a = new X(); X b = new X(); Object c = sum(a, b); }

18 Dynamiczne typy def sum(arg1, arg2): return arg1 + arg2 print sum(42, 47) print sum('spam', 'eggs')

19 Grupy operatorów Operatory pogrupowane są ze względu na sposób ewaluacji Brak grup jedno-elementowych

20 Zapytania atomowe Literały Np. 2, 3.14, napis Nazwy Np. osoba, miasto, x Wynikiem ewaluacji nazwy jest zbindowanie jej na stosie środowisk

21 Operatory algebraiczne Nie używają ENVS Głównie operatory arytmetyczne, porównania, itp. Jeżeli q 1 i q 2 to zapytania, a to binarny operator algebraiczny to q 1 q 2 jest zapytaniem Jeżeli q 1 to zapytanie, a to unarny operator algebraiczny to q 1 jest zapytaniem

22 Operatory niealgebraiczne Ewaluowane na stosie środowisk Binarne Np. where,. (kropka), order by itp. Ewaluacja zapytania q 1 θ q 2 : Ewaluacja zapytania q 1 Dla każdego elementu z rezultatu, ewaluowane jest q 2 Do wyniku tej ewaluacji stosowany jest operator θ aby obliczyć wynik częściowy

23 Drzewo zapytania empl where sname == Smith where empl== snameSmith

24 Przykładowa baza i 1 empl i 2 fname John i 5 salary 2000 i 4 dept i 20 dept i 21 name IT i 22 employee i 3 sname Smith i 6 empl i 7 fname Bob i 9 salary 2300 i 10 dept i 8 sname Gordon i 11 empl i 13 dept i 12 sname Smith i 23 employee i 24 boss i 25 dept i 26 name Marketing i 27 employee i 28 boss

25 Ewaluacja empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) ENVSQRES empl where sname == Smith

26 Ewaluacja empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) ENVSQRES i 1, i 6, i 11 empl where sname == Smith

27 Ewaluacja empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) ENVSQRES i 1, i 6, i 11 fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 ) empl where sname == Smith

28 Ewaluacja ENVSQRES i 1, i 6, i 11 empl where sname == Smith empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 )

29 Ewaluacja ENVSQRES i 1, i 6, i 11 empl where sname == Smith i3i3 empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 )

30 Ewaluacja ENVSQRES i 1, i 6, i 11 empl where sname == Smith i3i3 Smith empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 )

31 Ewaluacja ENVSQRES i 1, i 6, i 11 empl where sname == Smith True empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 )

32 Ewaluacja ENVSQRES i 1, i 6, i 11 empl where sname == Smith Wynik pomocniczy: i 1 empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 )

33 Ewaluacja ENVSQRES i 1, i 6, i 11 empl where sname == Smith i8i8 Wynik pomocniczy: i 1 empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 )

34 Ewaluacja ENVSQRES i 1, i 6, i 11 empl where sname == Smith i8i8 Smith Wynik pomocniczy: i 1 empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 )

35 Ewaluacja ENVSQRES i 1, i 6, i 11 empl where sname == Smith False Wynik pomocniczy: i 1 empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) fname(i 2 ) sname(i 3 ) dept(i 4 ) salary(i 5 )

36 Ewaluacja empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) ENVSQRES i 1, i 6, i 11 fname(i 12 ) dept(i 13 ) empl where sname == Smith Wynik pomocniczy: i 1

37 Ewaluacja empl(i 1 ) empl(i 6 ) empl(i 11 ) dept(i 17 ) dept(i 22 ) ENVSQRES i 1 empl where sname == Smith

38 Konstrukcje imperatywne Mogą modyfikować stan bazy i stan ENVS Mogą tworzyć nowe sekcje na ENVS Np. for, while, create, delete, operatory przypisania, wstawiania

39 Funkcje Otwierają nowe środowisko Mogą być deklarowane z konkretną, bądź zmienną ilością parametrów Parametry mogą mieć wartości domyślne Wynikiem funkcji może być referencja do innej funkcji

40 Funkcje def averegeWage(*wages): i,sum=0,0.0 for w in wages: i+=1 sum+=w else: print No wages given print sum/i averegeWage((employee where dept.name==Sales).salary)

41 SQL+JDBC+Java Connection conn; ResultSet R; Statement s;... s=conn.createQuery();... R=s.executeQuery( "SELECT salary FROM empl WHERE sname = 'SMITH'"); while (R.next()){ System.out.println (R.getString(1)); }

42 PySBQL print (empl where sname == "Smith").salary

43 PySBQL – przykłady for n, surn in empl.(fname,sname): print n, surn

44 PySBQL – przykłady for p in (dept where name==IT).employee: p.salary *=1.15 if (p.salary as ps> p.dept.boss.salary as bs): ps, bs = bs, ps print p.(fname, sname, salary)

45 PySBQL – przykłady print empl.(Mr, fname, sname, earns, salary)

46 PySBQL – przykłady nowak = first( osoba where nazwisko == Nowak ) if nowak.pensja as p < 2000: p*=1.30 print nowak else: p+=

47 PySBQL – przykłady def fib(n): #Lista liczb Fibonacciego mniejszych od n wynik = [] a, b = 0, 1 while b < n: wynik+=[b] a, b = b, a+b return wynik


Pobierz ppt "PySBQL Język zapytań dla obiektowych baz danych. Aplikacje bazodanowe Główny nurt budowania aplikacji opiera się na połączeniu: SQL JDBC Java Jak wyświetlić"

Podobne prezentacje


Reklamy Google