Domknięcie przechodnie (również) w bazach danych

Slides:



Advertisements
Podobne prezentacje
Niezawodności sieci telekomunikacyjnych
Advertisements

STRUKTURY DANYCH.
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Algorytmy – c.d. złożoność algorytmów struktury danych
ALGORYTMY GRAFOWE.
Rafał Hryniów Tomasz Pieciukiewicz
Grażyna Mirkowska PJWSTK 15 listopad 2000
Homologia, Rozdział I „Przegląd” Homologia, Rozdział 1.
Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem
Bazy danych i inżynieria oprogramowania
Algorytm Dijkstry (przykład)
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
ALGORYTMY I STRUKTURY DANYCH
© K.Subieta. Konstrukcja systemów obiektowych i rozproszonych 1, Folia 1 październik 2004 Konstrukcja systemów obiektowych i rozproszonych Wykładowca:
MS Access 2003 Kwerendy Paweł Górczyński.
MS Access 2000 Kwerendy Piotr Górczyński 25/08/2001.
ZŁOŻONOŚĆ OBLICZENIOWA
Turbo pascal – instrukcje warunkowe, iteracyjne,…
WYKŁAD 7. Spójność i rozpięte drzewa
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 6: Tablice, rekordy, zbiory.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 8: Perspektywy i sekwencery.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
Kurs Pascala – spis treści
Co to jest studium przypadku?
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL-owskie szlaki górskie
Tablice jednowymiarowe 1
Zapytania SQL: wydajność i optymalizacja
Komunikacja z arkuszem. Iteracje. Funkcje.
Algorytmy grafowe Reprezentacja w pamięci
Projektowanie fizycznej bazy danych
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Język SQL – ciąg dalszy DML (Data Manipulation Language)
Język SQL (Structured Query Language) DDL (Data Definition Language)
ALGORYTMY I STRUKTURY DANYCH
dr inż. Piotr Muryjas Wyższa Szkoła Przedsiębiorczości i Administracji
WYKŁAD 7. Spójność i rozpięte drzewa Graf jest spójny, gdy dla każdego podziału V na dwa rozłączne podzbiory A i B istnieje krawędź z A do B. Definicja.
OPERACJA DZIELENIA W SQL
SQL – zapytania posumowanie
SQL – Structured Query Language (3)
O relacjach i algorytmach
Automatyczne dereferencje w języku SBQL
Zbiór do posortowania mieści się w pamięci
Programowanie strukturalne i obiektowe
20 września 2003r. Centrum Kształcenia Ustawicznego im. St. Staszica w Koszalinie Wstęp do algorytmiki Autor: Marek Magiera.
Podstawy programowania w języku C i C++
Rodzaje, przechodzenie grafu
Andrzej Macioł Bazy danych – model relacyjny – cz. 1 Andrzej Macioł
Programowanie strukturalne i obiektowe
Języki i środowiska programowania systemów rozproszonych, Wykład 05, Slajd Języki i środowiska programowania systemów rozproszonych Wykładowca:
Instrukcje iteracyjne
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Model relacyjny.
Autor: Joanna Barańska Promotor: dr inż. Paweł Figat Konsultant:
Wykład 10 typ zbiorowy rekurencja.
Algorytmika Iteracje autor: Tadeusz Lachawiec.
Temat 1: Strukturalny język zapytań SQL
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Algorytmy i Struktury Danych
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Zagadnienie i algorytm transportowy
Relacja (ang.relation) Po podzieleniu danych na tabele i zdefiniowaniu pól kluczy podstawowych trzeba wprowadzić do systemu bazy danych informacje na temat.
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
Zagadnienia transportowe Katedra Ekonomiki i Funkcjonowania Przedsiębiorstw Transportowych.
Transformacja modelu EER do modelu relacyjnego
Algorytmy i struktury danych
Dane, zmienne, instrukcje
Zapis prezentacji:

Domknięcie przechodnie (również) w bazach danych Andrzej Topolewski slajdów 16+1

Co to jest domknięcie przechodnie Dwa źródła pojęcia: teoria grafów, teoria mnogości Relacja binarna R R(A,B), R(B,C), R(C,D) R(A,B), R(B,C), R(C,D) R(A,C), R(B,D), R(A,D) Graf domknięcia przechodniego dla G to najmniejszy graf, który zawiera G i jeśli istnieje w G (równoważne: w domknięciu G) ścieżka P --> R to w domknięciu istnieje krawędź (P, R) Domknięcie relacji R, to najmniejsza relacja przechodnia zawierająca R. Warunek przechodniości relacji: R(A,B) ^ R(B,C) => R(A,C) Porządek określający element najmniejszy to liczność zbioru (krawędzi, elementów relacji) Domknięcie jest jednoznaczne.

Inne sformułowanie semantyki Wynik procesu iteracyjnego ŚcieżkiNplus1 = COMPOSE(ŚcieżkiN, graf) Aby otrzymać domknięcie możemy zsumować ścieżki kolejno długości 2, 3, 4 ... N N - maksymalna długość ścieżki, która nie może być zredukowana o cykl. Aby obliczyć krok iteracji nie musimy znać całego grafu - wystarczy sposób na tworzenie zbioru ścieżek o 1 dłuższych. Pozwala to na większą elastyczność - dane+warunek złączenia = graf Delta-iteracja: wykorzystanie poprzedniego wyniku daje kolejny przyrost Domknięcie = G + COMPOSE(G,G) + COMPOSE(COMPOSE(G,G), G) + ...

Jeszcze inaczej: Rozwiązanie równania stałopunktowego Domknięcie = Graf  COMPOSE(Domknięcie, Graf) Suma zbiorów?, wielozbiorów? Co jest typem wyniku? Graf domknięcia ma tą własność, że już się nie da domknąć (domknięcie jest identyczne z nim) Jest to jednocześnie wyrażenie rekursji Równanie stałopunktowe jest deklaratywnym wyrażeniem semantyki. Domknięcie daje się integrować z językami zapytań i optymalizować. Procedury rekurencyjne mogą wyrazić to samo zapytanie, ale automatyczna optymalizacja nie jest możliwa.

Jak podać COMPOSE Definiujemy sposób integracji operatora z językiem Schemat: Bezpośrednio<Od, Do, ...> CREATE VIEW Połączenie AS DISTINCT FIXPOINT OF Bezpośrednio BY SELECT Połączenie.Od, Bezpośrednio.Do FROM Połączenie, Bezpośrednio WHERE Połączenie.Do = Bezpośrednio.Od Domknięcie = B  SELECT(B,B) as s1  SELECT(s1,B) as s2  ... Powstało wiele pomysłów jak dodać moc domknięcia przechodniego do istniejących języków zapytań. Propozycje dokonują różnych wyborów pomiędzy właściwościami operatora i proponują pewną składnię. Propozycja J.Edera: perspektywa, być może nieskończona SBQL: nie potrzeba integracji, ponieważ semantyka operatora jest spójna z zasadami języka i można tylko rozpatrywać modyfikatory We wzorze dla uproszczenia pominąłem przemianowywanie. Kropka jest tu jednym krokiem - obliczeniem drugiego zapytania w środowisku pierwszego. Drugie zapytanie tworzy wyrażenie COMPOSE otrzymując niejawnie środowisko (dostęp do poprzednio obliczonych danych) SBQL: (Bezpośrednio as P) closed unique by (Bezpośrednio where Od=P.Do) as P Domknięcie = B  B.(B where...)  B.(B where...).(B where...)  ...

Struktury wyrażające grafy, hierarchie Zastosowania: Struktury wyrażające grafy, hierarchie Systemy transportowe, przepływy Systemy równoległe - zależności czasowe Konstrukcja parsera Hierarchie osób, elementów, dekompozycje BOM - Bill of Material W systemach reprezentujących połączenia oprócz bezpośredniej nawigacji zazwyczaj ścieżki też mają pewną interpretację, a domknięcie wyraża zbiór osiągalny przy pewnych warunkach, które możemy podać przy warunku złączenia. W systemach równoległych domknięcie może reprezentować zbiór stanów dopuszczalnych w danym momencie Przydaje się podczas konstrukcji automatu parsującego dla zadanej gramatyki Wszelkie hierarchie reprezentujące zależności lub zawieranie, gdzie pewna informacja jest rozproszona po elementach są naturalnym miejscem na zastosowanie operatora domknięcia. Domknięcie może wyrażać iteracyjny proces (select, update) po takiej hierarchii BOM - rachunek materiałowy w zastosowaniach produkcyjnych, przemysłowych np..: dekomponujemy wyrób trwały, dom, skomplikowany cykl produkcyjny.

Przemysłowe hierarchie Zastosowania: BOM Przemysłowe hierarchie Najprostsze wyjaśnienie: dekompozycja produktu. Komplikacje: duża ilość parametrów Zalecenia standaryzacyjne Wplot w produkcję Element montowany z wielu innych ma zazwyczaj strukturę dekompozycyjną na wyróżnialne podelementy. Z każdym podelementem mogą być związane informacje jak ilość, pracochłonność, koszt itd... Nie muszą to być „rzeczy”, mogą być materiały Np.: restauracja (kubełek->skrzydełka->sos->musztarda->gorczyca) Element może mieć N cech (opcji) np.:długość, materiał. Istnieje więc cały zbiór zależności pomiędzy parametrami: np..:długość wpływa na koszt. APICS = American Production & Inventory Control Society APICS zdefiniowało szereg standardów i schematów obsługi BOM typu: zasady identyfikowania części (konkretne, czy schemat), modularyzacja struktur (podział na część wspólną dla wielu produktów i różną) obsługa zbiorów elemntów nie połąćzonych bezpośrednio. BOM może być połączony z informacją o procesie - operacje łączenia, kolejność, normy czasowe, kwalifikacje, kontrola jakości, równoległość Zależność procesu od efektu, opcji produktu.

Różne się możliwości i ich konsekwencje Definiowanie krawędzi Warianty domknięcia: Różne się możliwości i ich konsekwencje Możliwości algorytmu Tylko obieg drzewa Domknięcie grafu Iteracja warstw Definiowanie krawędzi Złączenie naturalne Warunek złączenia Dostęp do ulotnych atrybutów Zabronienie cykli pozwala na uproszczenie algorytmu i skutecznie ogranicza rozmiar wyniku. Upraszcza semantykę iteracyjną. Domknięcie przechodnie dowolnego grafu utożsamia silnie spójne składowe i podaje zbiór wierzchołków osiągalnych. Iteracja daje największe możliwości - powtórzenia mogą generować nową informację. Złączenie naturalne: równość wybranych kolumn i projekcja na pozostałe Warunek: wyrażenie boolowskie obliczane na podstawie dostępnych atrybutów. Dostęp do ulotnych atrybutów: pozwala na generację danych o ścieżce (przyrostowo na podstawie poprzedniej informacji)

Warianty domknięcia (2): Różne modyfikatory i postawienie zadania Modyfikacje semantyki Tylko różne (unique) Liście Iteracja imperatywna Sformułowanie zadania Complete TC Partial TC Iteracja z generowaniem „closed unique by” <> „unique (closed by)” leaves by - niepotrzebne wyniki pośrednie. Ortogonalne do unique Iteracja - wykonanie akcji (np..: update) dla każdego elementu wyniku Complete transitive closure - podać cały graf domknięcia, wszystkie pary (będące początkiem i końcem ścieżki) Partial transitive closure - podać domknięcie przechodnie (zbiór wierzchołków osiągalnych) zbioru początkowego. Łatwy przypadek - pojedynczy wierzchołek = przejście grafu z markowaniem = weak PTC czyli podać domknięcie jako zbiór strong PTC = podać dla każdego z osobna Iteracja z powodu generowania danych unikalnych dla każdej ścieżki nie może być optymalizowana

Domknięcie przechodnie w SBQL Domknięcie buduje iteracyjnie wynik według podanego zapytania wykonywanego w środowisku obiektów początkowych Operator “closed by”: q1 closed by q2 1. q1 jest obliczane. Wynik jest przechowywany w tymczasowej tablicy T. 2. Dla każdego wiersza z tablicy T: a. Na stos środowisk odkładane jest nested(r). b. Obliczane jest zapytanie q2. Wynik q2 jest dodawany do T ponad iteracją. c. Ze stosu środowisk zdejmowana jest sekcja. Proces się kończy, gdy dla ostatniego wiersza T zapytanie q2 daje pustą tablicę. T zawiera wówczas końcowy wynik.

Domknięcie przechodnie w SBQL (2) Cechy tej wersji operatora Działa tylko dla grafów acyklicznych Pozwala na generację informacji Charakter obliczeniowy - nie wydajnościowy Nie pozwala na rekursję nieliniową Rozpoczyna od dowolnego zbioru Operator nie broni się przed zapętleniem. Gdyby unikał zapętlenia to traciłby na ekspresji. Niektóre implementacje nie pozwalają na odwołanie się do nietrwałych atrybutów np..: „connect by” (Oracle) Brak możliwości optymalizacji - za to większe możliwości obliczania Niektórzy proponują dodatkowe informacje „INCreasing attribute” które miałyby służyć optymalizacji. Patrz przykłady zadań Większość propozycji pozwala użyć tylko trwałych ekstensji jako źródło domykanych danych. Nie jest to problemem - perspektywy. Jest to problemem- wydajność klasycznego „partial transitive closure”

Transitive Closure - przykład Schemat: Wszystkie części składające się na silnik: (PART where NAME = “engine”) closed by (COMPOSITE. MadeFROM. USES. PART) Jak wyżej, zle tylko części podstawowe razem z ilością w silniku: (((PART where NAME = “engine”)  (1 as q)) closed by COMPOSITE. MadeFROM. ((USES. PART)  ((q * QUANTITY) as q))) where is_not_null(BASE) Całkowita masa silnika: sum((((PART where NAME = “engine”)  (1 as q)) closed by (COMPOSITE. MadeFROM. ((USES. PART)  ((q * QUANTITY) as q)))). ((COMPOSITE.MassINCREMENT  BASE.MASS) * q))

Procedura CostAndMass Procedura może wyznaczać rekursywną perspektywę CostAndMass z wirtualnymi atrybutami name, cost, mass, i parametrem P (kolumna identyfikatorów części) Dla każdej części p w P wyznacza nazwę, całkowity koszt i całkowitą masę p. procedure CostAndMass( var P ) begin return P. ( (NAME as name )  ((BASE.COST  COMPOSITE. (AssemblyCOST + sum( MadeFROM .(QUANTITY * (CostAndMass(USES. PART).cost)))) as cost)  ((BASE.MASS  COMPOSITE. (MassINCREMENT + sum( MadeFROM .(QUANTITY * (CostAndMass(USES. PART).mass)))) as mass)) end CostAndMass; Jakie są możliwości automatycznej optymalizacji? Podobno są już stosowane techniki „method caching”. Na pewno lepiej zrobi to człowiek, choć czasem komputer może stwierdzić, że procedura nie ma efektów ubocznych. Koszt jednostki masy silnika: (CostAndMass(PART) where name = “engine”). (cost / mass)

Transitive Closure - przykład iteracji Możliwość wykonywania iteracji mechanizmem domknięcia wartość := 1; numer_iteracji := 1; while numer_iteracji <= 9 { wartość := ( q()/wartość + wartość )/2; numer_iteracji := numer_iteracji + 1; } (1 as wartość)  (1 as numer_iteracji) closed by ((((q/wartość + wartość)/2) as wartość)  ((numer_iteracji+1) as numer_iteracji)) where numer_iteracji  9 Możliwość nazywania stałych (wyrażeń) i odwoływania się do tych nazw pozwala formułować dowolną iterację niekoniecznie odwołującą się do danych trwałych. Różnice w powyższych zapisach: q() - wywołanie funkcji zwracającej liczbę, q - zapytanie wynikiem zapytania są również wszystkie wyniki pośrednie

Zadania wymagające różnej mocy podać firmy kontrolowane: Udział<posiadacz, posiadany, procent_udziałów> kontrola gdy >50%, kontroluje_bezpośrednio Dane jw. Firma jest kontrolowana, gdy posiadacz wspólnie z kontrolowanymi firmami posiada >50% Odległość<MiejsceA, MiejsceB, Ile> podać miejsca w promieniu 100 od „X” (unikalne) Czynnik<wartość>, podać kombinacje z powtórzeniami czynników o iloczynie < 100 1. Dana jest dodatkowa tablica kontroluje_bezpośrednio jako zbiór tych par, gdzie procent_udziałów>50 A jest kontrolowane przez B jeśli A posiada ponad 50% udziałów B lub A posiada firmę, która kontroluje B. Jest to klasyczna forma przechodniości. Najprostszy mechanizm wystarczy. 2. Tutaj aby sprawdzić czy A kontroluje B należy zsumować udziały A i kontrolowanych przez niego firm. Jest to dodatkowa iteracja po obliczonych dotychczas danych - rekursja nieliniowa. Rek. nieliniowa - zagnieżdżanie wywołań. Niemożliwe do wyrażenia operatorem domknięcia, a o ile się nie mylę to nawet niemożliwe do uzyskania pojedynczym zapytaniem SBQL. 3. Do liczenia odległości A od D konieczna jest generacja atrybutu „suma odległości” Nie zawsze dopuszczane. Dla uproszczenia unikalność. 4. W tym przypadku konieczne jest obsługiwanie cykli - liczby typu 3,5,7 mogą być w iloczynie wiele razy, a zwykłe domknięcie nie powtarza elementów.

Firmy słabo kontrolowane Udział<posiadacz, posiadany, procent_udziałów> Firma jest kontrolowana, gdy posiadacz wspólnie z kontrolowanymi firmami posiada >50% CREATE VIEW posiada(posiadacz, posiadany) AS DISTINCT FIXPOINT OF bezpośrednio BY SELECT u1.posiadacz, u2.posiadany FROM udział AS u1, udział AS u2 WHERE 50 < (SELECT procent_udziałów FROM udział WHERE udział.posiadacz = u1.posiadacz AND udział.posiadany = u2.posiadany + SELECT SUM(udziałPośrednio.ile) FROM posiada, udział AS udziałPośrednio WHERE u1.posiadacz = posiada.posiadacz AND posiada.posiadany = udziałPośrednio.posiadacz AND udziałPośrednio.posiadany = u2.posiadany) Zapytanie o słabo kontrolowane firmy jest możliwe do sformułowania jako perspektywa komponująca domknięcie przechodnie pierwotnej tabeli. Dlaczego? otóż w podzapytaniu została użyta sama nazwa perspektywy - daje to dodatkowe przeszukanie (selekcję) po częściowym wyniku. W swojej pracy autor po prostu stwierdza, że używanie jest zabronione. R. nieliniowa - wykładnicze zapytania.

Algorytmy obliczania domknięcia Mnożenie macierzy lub chodzenie po grafie M - macierz incydencji, to M2 to macierz ścieżek dł. 2 Obliczanie grafu kondensacji + domykanie drzewa Przechodzenie wgłąb identyfikując sss Reprezentacja wyniku Mnożenie macierzy nie nadaje się do baz danych - reprezentacja rozrzutna, operacje zbyt globalne. Uzyskany rząd wielkości: oczekiwany - O(n^2) pesymistyczny - O(n^ *log(n)) Problem: unikanie zbędnych obliczeń, źródła nadmiarowości: silnie spójne składowe, inne. Lokalne usprawnienia Efektywna reprezentacja jest kluczowa - są lepsze niż listy incydencji