Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałJaropełk Pabisiak Został zmieniony 10 lat temu
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 <i1,Osoba, {, <i5, Adres, {, }>
11
Model relacyjny a M0 Schemat relacyjny: Osoba(Imię, Nazwisko, DataUr) Relacja Osoba: <i1,Osoba, {, }> <i5,Osoba, {, }> ImięNazwiskoDataUr JanNowak9-10-1971 AdamKowalski22-01-1968
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+= 600.00
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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.