Modelowanie bazodanowe - Uniwersytet Zielonogórski
Transkrypt
Modelowanie bazodanowe - Uniwersytet Zielonogórski
Modelowanie bazodanowe - Wykład Grzegorz Arkit Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski 15 grudnia 2013 G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 1 / 77 Literatura Literatura Podstawy baz danych, Tadeusz Pankowski, Wydawnictwo Naukowe PWN, 1992 InterBase 6, Language Reference, Inprise/Borland, 1999 (dostępny publicznie) Firebird 2.5 Language Reference Update, Paul Vinkenoog, 2011 (dostępny publicznie) Databases - a first course, John Carter, 2001 (Chapter 3: Entity relationship modelling dostępny opublicznie) SQL i PL/SQL – podstawy, Andrzej Klusiewicz, 2013 (dostępny publicznie) inne źródła internetowe oraz materiały własne prowadzącego G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 2 / 77 Wykład I - Wstęp Przypomnienie wiadomości z teorii baz danych Relacyjny model danych Model relacyjny W najprostszym ujęciu w modelu relacyjnym dane grupowane są w relacje, które reprezentowane są przez tablice. Kolumny opisują atrybuty a wiersze dane. Pomiędzy atrybutami w danej relacji mogą zachodzić zależności funkcyjne. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 3 / 77 Wykład I - Wstęp Przypomnienie wiadomości z teorii baz danych Pierwsza postać normalna (1PN, 1NF) Każda wartość jest atomowa (elementarna). WYPOŻYCZENIA (nr czytelnika, lista książek) nr czytelnika lista książek 128 Pascal, Access 155 Excel, Pascal WYPOŻYCZENIA (nr czytelnika, książka) - 1PN nr czytelnika książka 128 Pascal 128 Access 155 Excel 155 Pascal G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 4 / 77 Wykład I - Wstęp Przypomnienie wiadomości z teorii baz danych Przykłady: nazwisko, imiona – nie jest w 1PN, czy adres jest wartości elementarną? G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 5 / 77 Wykład I - Wstęp Przypomnienie wiadomości z teorii baz danych Druga postać normalna (2PN, 2NF) Każda kolumna zależy funkcyjnie od klucza(każdego). Zaliczenia Przedmiot, NrStudenta, TypOceny, Ocena, Student Klucz: Przedmiot, NrStudent Student zależy funkcyjnie od NrStudenta Rozkład: względem zależności funkcyjnej NrStudent → Student R1: Przedmiot, NrStudenta, TypOceny, Ocena R2: NrStudenta, Student G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 6 / 77 Wykład I - Wstęp Przypomnienie wiadomości z teorii baz danych Trzecia postać normalna (3PN, 3NF) Gdy każdy atrybut niekluczowy jest bezpośrednio zależny od klucza (nie ma zależności tranzytywnych). imię Emil Zofia Eulalia nazwisko Zając Zima Jańska miejsce urodzenia Pszczyna Pszczyna Szczebrzeszyn powiat pszczyński pszczyński zamojski Klucz: imię i nazwisko, ale jest zależność Miejsce urodzenia –> Powiat. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 7 / 77 Wykład I - Wstęp Przypomnienie wiadomości z teorii baz danych Postać normalna Boyce’a-Code’a(PNBC, BCNF) Schemat w PNBC gdy z istnienia nietrywialnej zależności X → A wynika, że X jest nadkluczem. Atrybuty: Miasto, Ulica, Kod Zależności: MU→ K, K→M Klucz: MU, KU Dla zależności K→M, K jest nadkluczem. UWAGA: nie do końca właściwy, bo nie zawsze jednej ulicy w mieście odpowiada jeden kod. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 8 / 77 Wykład I - Wstęp Przypomnienie wiadomości z teorii baz danych Dekompozycja odnalezienie nietrywialnej zależności funkcyjnej: A1 A2 ...An → B1 B2 ...Bm , która narusza BCNF – tzn. A1 A2 ...An nie jest nadkluczem, dodanie do prawej strony wszystkich atrybutów zależnych funkcyjnie od A1 A2 ...An – w ten sposób powstaje nowa relacja, druga relacja będzie się składała z atrybutów A1 A2 ...An oraz z pozostałych (poza B1 B2 ...Bm ) atrybutów relacji. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 9 / 77 Wykład I - Wstęp System zarządzania bazą danych System zarządzania bazą danych System zarządzania bazą danych (SZBD, ang. Database Management System, DBMS) – oprogramowanie bądź system informatyczny służący do zarządzania bazą danych. System zarządzania bazą danych może być również serwerem bazy danych (SBD) lub też może udostępniać bazę danych lokalnie – na określonym komputerze. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 10 / 77 Wykład I - Wstęp System zarządzania bazą danych Niezbędne mechanizmy środki do administrowania zapisanymi na nośnikach zbiorami danych, środki zapewniające integralność i bezpieczeństwo danych, środki pozwalające na odtworzenie zawartości bazy danych po awarii, narzędzia programistyczne wykorzystujące język programowania i API, dostęp do danych poprzez język zapytań bazy danych np. SQL, wielodostępność danych, np. poprzez transakcje, środki pozwalające na autoryzację dostępu do danych, środki do zarządzania metadanymi, środki optymalizujące wykorzystanie pamięci operacyjnej, środki optymalizujące czas dostępu do danych, np. indeksy, środki do pracy w środowisku rozproszonej bazy danych. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 11 / 77 Wykład I - Wstęp System zarządzania bazą danych Dodatkowe (praktyczne) mechanizmy wyzwalacze, procedury i funkcje operujące na danych, mechanizmy określania uprawnień do danych, perspektywy. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 12 / 77 Wykład I - Wstęp System zarządzania bazą danych Rodzaje baz danych lokalne (DBase, Paradox, Access, SQLite) bazy klient–serwer klastry bazodanowe (mirror, split) – replikacja G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 13 / 77 Wykład I - Wstęp System zarządzania bazą danych Najczęściej stosowane rozwiązania bazodanowe darmowe – lokalne: SQLite, rzadziej Dbase, Open/Libre Office Base, JavaDB, darmowe – serwerowe: MySQL (serwisy WWW), PostgreSQL, Firebird, darmowe – serwerowe (komercyjne): Oracle Express, MS SQLServer Express, DB2 Express (?) - darmowe wersje korporacyjnych baz danych, ale z ograniczeniami na ilość używanych zasobów komputera i/lub ograniczeniami na wielkość bazy, komercyjne - lokalne: MS Access, Paradox, komercyjne – serwerowe: Oracle, MS SQL Server, DB2, itd... G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 14 / 77 Wykład I - Wstęp Podstawy języka SQL Grupy komend języka SQL DML - Data Manipulation Language (INSERT, UPDATE, DELETE) DDL - Data Definition Language (CREATE, ALTER, DROP) DCL - Data Control Language (GRANT, REVOKE) języki proceduralne (PL/SQL) DQL - Data Query Language (SELECT) G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 15 / 77 Wykład I - Wstęp Podstawy języka SQL DML - Data Manipulation Language INSERT UPDATE DELETE Służą do manipulowania danymi w obrębie pojedyńczej tabeli. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 16 / 77 Wykład I - Wstęp Podstawy języka SQL DDL - Data Definition Language CREATE ALTER DROP Służą do zarządzania obiektami bazy danych takimi jak tablice, perspektywy, indeksy, klucze, procedury, funkcje, pakiety i wiele innych. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 17 / 77 Wykład I - Wstęp Podstawy języka SQL DCL - Data Control Language GRANT REVOKE Służa do zarządzania uprawnieniami użytkowników w odniesieniu do samej bazy (np. możliwość tworzenia obiektów) jak i w odniesieniu do obiektów (np. możliwość odczytania danych z tablicy lub ich modyfikowania). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 18 / 77 Wykład I - Wstęp Podstawy języka SQL Języki proceduralne Pozwalają budować procedury i/lub funkcje operujące na danych (np. zbudować uporządkowaną alfabetycznie listę nazwisk powiązanych z danym utworem, lub zebrać kilka operacji na danych w jeden blok widziany jako atomowa operacja z punktu widzenia użytkownika). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 19 / 77 Wykład I - Wstęp Podstawy języka SQL DQL - Data Query Language Komedna SELECT służąca do pobierania danych z tablic bazy danych. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 20 / 77 Wykład I - Wstęp Podstawy języka SQL Szczegóły na temat używania poszczególnych komend SQL można znaleźć w wymienionej literaturze. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 21 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Modelowanie danych W inżynierii oprogramowanie jest procesem tworzenia modelu danych dla systemu informacyjnego poprzez zastosowanie formalnych technik modelowania danych. Jest procesem używanym do definiowania i analizowania danych wymaganych do obsługi procesów biznesowych będących w zakresie systemu informacyjnego w danej organizacji. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 22 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Model danych Jest zapisem (w systemie informacyjnym) informacji o obiektach (wraz z ich własnościami) oraz relacji zachodzących pomiędzy tymi obiektami. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 23 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Model (schemat) koncepcyjny Obejmuje budowę modelu świata rzeczywistego wyrażonego w postaci określonych wymagań dotyczących danych. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 24 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Model logiczny Opisuje dane w postaci obiektów wraz z określonymi własnościami (zapisanymi za pomocą określonych typów danych) oraz relacje pomiędzy nimi. Sposób organizacji danych, typy danych oraz relacje pomiędzy nimi są opisane w sposób przewidziany dla danego rodzaju modelu logicznego (model relacyjny, model obiektowy itp). W naszym przypadku będzie to model relacyjny. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 25 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Model fizyczny Obrazuje fizyczny układ danych w docelowym systemie przeznaczonym do przechowywania danych (w naszym przypadku w systemie RDBMS). Model fizyczny może być powiązany z konkretnym rodzajem bazy danych, ale nie musi. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 26 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia W przypadku mniejszych systemów modele koncepcyjny i logiczny zazwyczaj są tożsame. W modelowaniu bazodanowym zakładamy, że wiemy jakie dane są w danej strukturze potrzebne do obsługi procesów biznesowych. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 27 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Encja (ang. entity) w bazach danych to reprezentacja wyobrażonego lub rzeczywistego obiektu (grupy obiektów) stosowana przy modelowaniu danych podczas analizy informatycznej. Formalnie jest to pojęcie niedefiniowalne, a podstawową cechą encji jest to, że jest rozróżnialna od innych encji. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 28 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Relacja pomiędzy encjami Opisuje w jaki sposób dane mogą zależeć od siebie w modelu relacyjnym. artysta → tworzy → ← jest tworzony ← G. Arkit (WMIiE) utwór Modelowanie bazodanowe (W) 15 grudnia 2013 29 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Identifying relation jeżeli jest, to referencja w tablicy podrzędnej będzie elementem jej klucza głównego. W najnowszych systemach (np. Oracle SQL Developer Data Modeler od wersji 3.3) relacja w modelu logicznym mogą posiadać dodatkowe atrybuty (np. relacja pomiędzy przepisem a składnikiem może zawierać jednostkę i ilość produktu użytego w danym przepisie). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 30 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Notacje w schematach relacyjnych Notacje w schematach relacyjnych G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 31 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia G. Arkit (WMIiE) Notacje w schematach relacyjnych Modelowanie bazodanowe (W) 15 grudnia 2013 32 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia G. Arkit (WMIiE) Notacje w schematach relacyjnych Modelowanie bazodanowe (W) 15 grudnia 2013 33 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Notacje w schematach relacyjnych IDEF1X Relationship Cardinality Syntax G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 34 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Notacje w schematach relacyjnych Bachman Identifying – pionowa kreska przy „wiele”. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 35 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Notacje w schematach relacyjnych Barker notations Identifying – pionowa kreska przy „wiele”. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 36 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia G. Arkit (WMIiE) Notacje w schematach relacyjnych Modelowanie bazodanowe (W) 15 grudnia 2013 37 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia G. Arkit (WMIiE) Notacje w schematach relacyjnych Modelowanie bazodanowe (W) 15 grudnia 2013 38 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Notacje w schematach relacyjnych Data Architect - notacja „kurzej” stopki – kółko (lub nic gdy nie jest wymagana), pionowa kreska gdy jest wymagana. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 39 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Notacje w schematach relacyjnych Reverse engineering Technika odwracania, inżynieria odwrotna, inżynieria wsteczna, programowanie zwrotne to proces badania produktu (urządzenia, programu komputerowego) w celu ustalenia jak on dokładnie działa, a także w jaki sposób i jakim kosztem został wykonany. W przypadku modelowania bazodanowego jest proces przejścia z modelu znajdującego się na niższym poziomie abstrakcji do modelu na wyższym poziomie abstrakcji. Najczęściej wykorzystywane do utworzenia modelu fizycznego na podstawie istniejącej bazy danych (np. w celu udokumentowania istniejącej bazy danych) G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 40 / 77 Wykład II - Modelowanie bazodanowe - podstawowe pojęcia Narzędzia Planowane narzędzia do użycia Oracle SQL Developer data Modeler Open ModelSphere Visual Paradigm for UML Community Edition ArgoUML-DB Narzędzia pozwalają używać kilku notacji Pozostałe darmowe narzędzia pozwalają zazwyczaj na modelowanie konkretnych baz danych na poziomie modelu fizycznego. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 41 / 77 Praktyczne elementy projektowania BD Nazewnictwo obiektów Przedrostki określające rodzaj obiektu: TB - tablica PRC - procedura TG - trigger itd.... Nazwy obiektów: liczba mnoga czy pojedyncza? Nazwy kluczy obcych: mianownik czy dopełniacz? Nazwy kluczy głównych: ID czy ID_tablica? G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 42 / 77 Praktyczne elementy projektowania BD Nazewnictwo obiektów Przedrostki określające fragment funkcjonalny schematu ST - student RK - rekrutacja PL - plan zajęć itd.... Należy pamiętać o ograniczeniach na długość nazw (np. Oracle - 30 znaków). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 43 / 77 Przydatne funkcje bazodanowe Ograniczenie danych widzianych przez użytkownika Updatable views ograniczenie przez where (w niektórych bazach danych przez „with check”) aby były „updatable” - kolumna z tabeli 1:1 na kolumnę w view aby można było robić insert w view muszą być wszystkie pola not null z tabeli with check option - aby spowodować kontrolę danych przy insert i update (czy po zmianie dane będą zgodne z definicją perspektywy) G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 44 / 77 Przydatne funkcje bazodanowe Ograniczenie danych widzianych przez użytkownika Firebird mogą być proste albo przez trigger – dodanie triggera do view blokuje automatyczny zapis do tabeli – trzeba wykonać w triggerze odpowiednią komendę SQL, PosgreSQL simple view is automatically updatable , view + „rule” (create rule "_insert" as on insert to uzytk_v do instead . . . ). Oracle simple view is automatically updatable, CREATE OR REPLACE TRIGGER order_info_insert INSTEAD OF INSERT ON order_info Uprawnienia: wystarczy nadać uprawnienia dla view – inaczej byłoby to bez sensu bo user i tak miałby bezpośredni dostęp do danych więc ograniczenie byłoby niepotrzebne. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 45 / 77 Przydatne funkcje bazodanowe Ograniczenie danych widzianych przez użytkownika Do czego można zastosować: dane osobowe – przechowywane w jednej tabeli, ale różne grupy użytkowników mogą widzieć tylko dane dla swoje grupy: student, pracownik, kandydat itp... do podziału danych na jednostki (w strukturze hierarchicznej) przy wykorzystaniu wyzwalaczy - można robić np. insert do jednej perspektywy z podziałem danych na dwie tabele. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 46 / 77 Przydatne funkcje bazodanowe Wyzwalacze - kontrola poprawności danych Wyzwalacze pozwalają na wygenerowanie zdefiniowanego przez użytkownika błędu (innego niż standardowe błędy SQL). Możemy np. sprawdzić czy sala w danym terminie jest zajęta i przy próbie wpisania jeszcze jednej rezerwacji wygenerować odpowiedni błąd. Oczywiście wszystkie wymienione konstrukcje można stosować także procedurach. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 47 / 77 Przydatne funkcje bazodanowe Wyzwalacze - kontrola poprawności danych Firebird tworzymy wyjątek: create exception nazwa ’tekst’ wywołujemy: exception nazwa lub wywołujemy : exception nazwa ’custom msg’ PostgreSQL raise exception ’tekst’; Oracle Raise_Application_Error(numer, ’tekst’), numer = -20000 .. -20999 G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 48 / 77 Przydatne funkcje bazodanowe Funkcje (procedury) zwracające zestawy rekordów Funkcje (procedury) zwracające zestawy rekordów mogą okazać się pomocne w sytuacjach, kiedy “normalne” (za pomocą komendy SELECT) pobranie danych z bazy jest niemożliwe lub wymaga zbudowania skomplikowanego zapytania. Za pomocą takich funkcji możemy np. z podanego kodu XML pobrać w postaci zestawu rekordów dane o ustalonej strukturze. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 49 / 77 Przydatne funkcje bazodanowe Funkcje (procedury) zwracające zestawy rekordów Firebird CREATE OR ALTER PROCEDURE pl_enum (parametry wejściowe) returns (pola+typy) as begin ...... – przypisanie wartości do zmiennych suspend; ...... end Wywołanie Jak normalną tabelę tylko, że z parametrami: SELECT ... FROM pl_enum(.......); G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 50 / 77 Przydatne funkcje bazodanowe Funkcje (procedury) zwracające zestawy rekordów PosgteSQL CREATE OR REPLACE FUNCTION funkca1(parametry) RETURNS SETOF record AS $BODY$ DECLARE rr record; begin for rr in select ...... loop return next rr; end loop; return ; end; $BODY$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER; G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 51 / 77 Przydatne funkcje bazodanowe Funkcje (procedury) zwracające zestawy rekordów Wywołanie Przy wywołaniu trzeba podać nazwy i typy kolumn: select ... from pl_jednostki_tablicy(’sala_vd’) as (id_jedn d_ G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 52 / 77 Przydatne funkcje bazodanowe Funkcje (procedury) zwracające zestawy rekordów Oracle Najpierw typ zwracanego rekordu: CREATE OR REPLACE TYPE ret_id id integer ); AS OBJECT ( Potem zbiór rekordów: CREATE OR REPLACE TYPE ret_id_set; G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 53 / 77 Przydatne funkcje bazodanowe Funkcje (procedury) zwracające zestawy rekordów Funkcja: CREATE OR REPLACE FUNCTION get_id_list(pStr IN varchar2) RETURN ret_id_set PIPELINED IS ret ret_id := ret_id(0); BEGIN ... PIPE ROW(ret); ..... RETURN ; END; Wywołanie SELECT id FROM TABLE(get_id_list(pR_IDs)) G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 54 / 77 Przydatne funkcje bazodanowe Temporary tables Temporary tables Postgresql Tabele tymczasowe są tworzone tylko na czas sesji - po zakończeniu sesji tablica jest kasowana. Po commit tabela może być nienaruszona, można skasować jej zawartość lub usunąć całkowicie. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 55 / 77 Przydatne funkcje bazodanowe Temporary tables Firebird Globalna – ma zdefiniowane na stałe metadane (nie trzeba jej tworzyć za każdym razem), ale zawartość jest kasowana po zakończeniu transakcji lub połączenia (w zależności od tego jak jest zdefiniowana). CREATE GLOBAL TEMPORARY TABLE ... [ON COMMIT <DELETE | PRESERVE> ROWS] Oracle Analogicznie hak Firebird G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 56 / 77 Przydatne funkcje bazodanowe Tablice nadmiarowe Tablice nadmiarowe Przechowują dane, które mogą być obliczone na podstawie innych danych, ale ich bezpośrednie obliczanie w trakcie działania aplikacji mocno obciąża bazę danych. Dlatego są one budowane w trakcie działania aplikacji: aktualizacja następuje okresowo (job), aktualizacja następuje po zmianie określonej wartości (np. nazwiska osoby). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 57 / 77 Przydatne funkcje bazodanowe SELECT z wyniku innego SELECT’a select . . . .. from (select . . . ... ) grupowanie wcześniej pogrupowanych wartości (np. średnia z sumy) użycie wyliczonych wartości w kilku innych wyrażeniach G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 58 / 77 Przydatne funkcje bazodanowe Metody dostępu do bazy danych z poziomu aplikacji Metody dostępu do bazy danych z poziomu aplikacji A. użytkownik aplikacji jest jednocześnie użytkownikiem bazy danych (DBUSER) B. aplikacja ma własny system użytkowników (APPUSER) G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 59 / 77 Przydatne funkcje bazodanowe Metody dostępu do bazy danych z poziomu aplikacji Zalety i wady DBUSER konta APPUSER: + użytkownik może samodzielnie pobierać dane w celu stworzenia np. jednorazowych raportów (chociażby do Excela) + jednostki (użytkownicy) mogą samodzielnie wykonywać na swoje potrzeby oddzielne, potrzebne tylko im moduły +/- projektując aplikację z DBUSER trzeba całą logikę zawrzeć w bazie danych (przynajmniej jeżeli chodzi o kontrolę uprawnień i integralność danych) - nieświadomy użytkownik może obciążyć bazę niezoptymalizowanymi zapytaniami - komendy SQL (UPDATE, DELETE) nie pytają o potwierdzenie modyfikacji danych – można zmodyfikować dużą ilość danych (np. budując nieprawidłowy warunek WHERE) G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 60 / 77 Przydatne funkcje bazodanowe Metody dostępu do bazy danych z poziomu aplikacji Zalety i wady APPUSER konta DBUSER: + użytkownik może wykonywać tylko operacje dopuszczone przez projektanta aplikacji + część logiki można zawrzeć w aplikacji - nie ma możliwości bezpośredniego dostępu do danych, więc nietypowe raporty i zestawienia musi wykonywać administrator - mimo wszystko użytkownik, żeby połączyć się z bazą danych musi przesłać do niej dane logowania (DBUSER) – gdzieś to trzeba zapisać (czyli istnieje możliwość złamania zabezpieczenia) + w przypadku aplikacji webowych (zwłaszcza na serwerach zewnętrznych) nie ma możliwości zbudowania systemu userów bazodanowych, więc zostaje tylko opcja z APPUSER G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 61 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami W tej części przedstawimy przydatne rozwiązania, które można wykorzystać we własnych modelach baz danych. Pierwszym z nich będzie model zarządzania użytkownikami systemu opartego o bazę danych - model ten można wykorzystać zarówno w systemach gdzie użytkownik aplikacji jest jednocześnie użytkownikiem bazodanowym, jak i w systemach gdzie obie te grupy są rozdzielone. Model załączony jest w oddzielnym pliku (model_1.jpg). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 62 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Użyte typy danych (domeny): d_ids, d_ref, d_ref_null – oparte na typie bigint domeny służące w do tworzenia referencji (kluczy głównych i obcych, ostatia dopuszcza wartości puste), d_sys_name – domena tekstowa (30 znaków) która służy do zapisywania w tabelach nazw obiektów bazodanowych, z kontrolą czy dana nazwaz może być identyfikatorem, d_nazwa, d_nazwa_krotka, d_opis – typy tekstowa o określonej z góry długości, d_calkowita – wartość całkowita, d_logiczna – wartość logiczna (TRUE/FALSE lub 0/1 w zależności od tego co oferuje silnik danej bazy). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 63 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Jednostki Przyjęto, że w modelu występuje hierarchiczny model podziału jednostek; każda jednostka może mieć tylko jedną jednostkę nadrzędną, i tylko jedna jednostka może być na szczycie hierarchii (jest tylko jedna jednostka bez jednostki nadrzędnej). Zawsze występuje przynajmniej jedna jednostka (root), której nie można usunąć z systemu (można tylko zmienić jej opis). Ważne: tablice opisane w modelu powinny odzwierciedlać bieżący stan w organizacji - jeżeli z jakichś względów potrzebne jest np. zachowanie historii zmian w strukturze, to powinniśmy zrobić to za pomocą oddzielnych tablic. Ponieważ nie wszystkie silniki bazodanowe oferują wbudowaną obsługę struktur hierarchicznych, dodatkowo stworzono tablicę jedn_zalezn która zawiera wszystkie pary jednostka-nadrzędna–jednostka-podrzędna (zarówno zależność bezpośrednia jak i zależność pośrednia). Ze względów praktycznych przyjęto, że w tablicy tej występują też wszystkie pary jednostka–jednostka. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 64 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Zabezpieczenia: nie można usunąć jednostki ze szczytu hierarchii (root), po utworzeniu jednostki dodajemy zależności: jednostka–jednostka oraz pary jednostka–jednostka nadrzędna przy zmianie jednostki nadrzędnej (przeniesienie jednostki w strukturze) kasujemy wpisy o zależnościach i tworzymy nowe, kontrola czy nie powstają cykle nie można modyfikować rekordów w tablicy z zależnościami (tylko INSERT I DELETE), G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 65 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Poziomy uprawnień Opisują do jakich obiektów bazodanowych użytkownik ma dostęp – w przypadku modelu APPUSR=DBUSER, odpowiadają one rolom. Oznacza to, że modyfikując dane opisujące poziom uprawnień modyfikujemy też role bazodanowe (wymaga to odpowiednich uprawnień administracyjnych na poziomie bazy danych, nie można też wtedy zmienić nazwy poziomu, ponieważ bazy zazwyczaj nie dopuszczają zmian nazwy roli). Obiekty bazodanowe, do których dostęp chcemy kontrolować, zebrane są w tablicy obiekt, wraz z podanym typem obiektu (tablica, perspektywa i procedura/funkcja). Ważną grupę stanowią obiekty, w których dane będą dzielone ze względu na jednostki – są to perspektywy pobierające dane z tablic bazowych; jeżeli umożliwiają one modyfikowanie danych to traktujemy jej jak tablice (tablice dzielone), w przeciwnym wypadku jak właściwe perspektywy (tylko odczyt). Typy obiektów są ustalone (typ_obiektu - tablicy tej nie można modyfikować w żaden sposób (read-only), podobnie zresztą jak tablicy z rodzajami uprawnień (upraw). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 66 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Tablica typ_obiektu_upraw opisuje jakie uprawnienia można nadawać obiektom danego typu. Dodatkowo występuje tablica obiekt_wyklucz_upraw, która dla danego obiektu pozwala wyłączyć kontrolę konkretnego uprawnienia. Tablica poziom_obiekt pozwala nadać uprawnienia do obiektu dla określonego poziomu uprawnień (UWAGA: w sytuacji, gdy APPUSER=DBUSER powoduje to nadanie/odebranie uprawnień dla określonej roli). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 67 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Użytkownicy Dane o użytkownikach zebrane są w tablicy uzytk. Należy pamiętać, że w modelu APPUSER = DBUSER, dane te przekładają się na użytkowników bazodanowych, co pociąga za sobą konieczność dbania o odpowiednie konstruowanie nazw, a także dopilnowanie, żeby użytkownik dokonujący zmian miał odpowiednie uprawnienia (podobnie jak przy poziomach uprawnień). Każdy użytkownik może być powiązany z różnymi poziomami uprawnień, z których wynikają jego uprawnienia, ale może mieć też nadane dodatkowe indywidualne uprawnienia dla wybranych obiektów (tablica uzytk_obiekt). Aby uprościć sprawdzanie uprawnień, należy utworzyć perspektywę (np. efektywne_uprawnienia, w której będą zebrane wszystkie uprawnienia użytkownika (te wynikające z poziomów uprawnień oraz te nadane indywidualnie). W przypadku rozbudowanych systemów z dużą ilością uprawnień można rozważyć stworzenie “materialized view” lub nawet tablicy, w której dane będą aktualizowane na życzenie lub w określonych odstępach czasowych (np. w nocy). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 68 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Podziały danych W strukturze hierarchicznej występuje nie tylko podział uprawnień do operowania na wybranych danych. Dane te należy podzielić także ze względu na miejsce w strukturze organizacyjnej. Np. dziekanat konkretnego wydziału uczelni widzi tylko dane swoich studentów. Oczywiście nie należy tworzyć oddzielnych tablic dla każdego dziekanatu, tylko podzielić dane istniejące w konkretnej tablicy za pomocą perspektywy lub perspektyw; najlepsza opcją jest zastosowanie jednej perspektywy, która będzie zwierała dane widoczne przez jednego użytkownika (w przypadku konieczności zmian dokonujemy ich w jednym miejscu). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 69 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Podziały danych Po pierwsze musimy określić w jaki sposób będą dzielone dane dla poszczególnych podziałów: tablica podzial i tablica podzial_jedn. Druga z tych tablic opisuje jakie jednostki wchodzą w skład danego poziomu; ważne jest pole czy_podrzedne - mówi nam ono, że oprócz danej jednostki do poziomu wchodzą wszystkie jednostki podrzędne danej jednostki - dzięki temu, po dodaniu jednostki nie musimy się przejmować dodaniem jej do odpowiednich poziomów. Użytkownik jest zawsze przypisany do jednego podziału danych. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 70 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Tablice dzielone W rzeczywistości są to perspektywy (jedna dla jednej tablicy) w których wyświetlane są dane przewidziane dla danego poziomu; w zależności od rodzaju danych mogą być one przeznaczone tylko do odczytu (faktyczne perspektywy) lub mogą aktualizowane (updatable view). Podział danych na jednostki może być takim jak dla całego podziału, do którego przypisany jest użytkownik, może też być określony indywidualnie dla konkretnej tablicy (perspektywy). Ze względu na dużą ilość możliwości definiowana widzialności danych w danej tablicy dzielonej, należy utworzyć perspektywę, która będzie zbierała dane o elementach danej tablicy dzielonej. Podobnie jak w przypadku poziomów uprawnień, w przypadku rozbudowanych systemów z duża ilością uprawnień można rozważyć stworzenie “materialized view” lub nawet tablicy, w której dane będą aktualizowane na życzenie lub w określonych odstępach czasowych (np. w nocy). G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 71 / 77 Przydatne fragmenty modeli bazodanowych System zarządzania użytkownikami Dane domyślne Do prawidłowej pracy systemu potrzebne jest stworzenie pewnych podstawowych obiektów w podanej strukturze: podstawowy poziom uprawnień - poziom, który zawiera uprawnienia, które musi posiadać każdy użytkownik systemu (np. uprawnienia connect czy uprawnienia select dla wybranych tablic) użytkownik-administrator - użytkownik, który ma uprawnienia do wykonywania czynności administracyjnych w systemie; użytkownik taki musi posiadać, dodatkowe uprawnienia na poziomie RDBMS, aby móc np. dodać użytkownika czy też zmienić mu hasło. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 72 / 77 Przydatne fragmenty modeli bazodanowych Kolizje wykorzystania zasobów Kolizje wykorzystania zasobów Np. tablice obiekt i rezerwacje. W tej drugiej są kolumny określające, kiedy dany obiekt jest zajęty (od-do w postaci timestamp, lub od-do i dzień/data). Możemy zastosować dwa podejścia: kontrola możliwości wykonania operacji rezerwacji a potem wpisanie rezerwacji lub kontrola poprawności wykonania operacji po jej wykonaniu. Każda z tych metod ma swoje wady. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 73 / 77 Przydatne fragmenty modeli bazodanowych Kolizje wykorzystania zasobów Kolizje wykorzystania zasobów Jeżeli sprawdzamy możliwość wykonania rezerwacji przed jej wykonaniem, to w systemach wielodostępnych, musimy zapewnić, żeby do czasy wykonania właściwej operacji rezerwacji, stan danych się nie zmienił. Efekt ten można osiągnąć np. stosując odpowiednie poziomy izolacji transakcji (repeatable read) lub inne mechanizmy blokowania tablic (danych). Niestety w systemach wielodostępnych może powodować to znaczne spowolnienie działania. W drugim podejściu kontrolę wykonujemy tuż po wykonaniu operacji (trigger after insert or update) i jeżeli wystąpi kolizja, generujemy błąd, co spowoduje wycofanie transakcji. Niestety takie podejście też nie jest pozbawione wad. Po pierwsze nadal istnieje ryzyko powstania kolizji (mniejsze, ale zawsze) w przypadku systemów wielodostępnych. Po drugie, kontrola jest wykonywana po zapisaniu danych w bazie, co powoduje, że wykorzystywane są mechanizmy bazy danych (np. temporary table spaces, redo-logi itp) Podejście to jest jednak dużo łatwiejsze w implementacji. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 74 / 77 Przydatne fragmenty modeli bazodanowych Wersjonowanie rekordów Wersjonowanie rekordów Pojęcie to występuje zwłaszcza w hurtowniach danych ale jest też istotne w tradycyjnym modelowaniu bazodanowym. Najczęściej są to sytuacje, kiedy pewne rekordy muszą zostać ukryte w bazie, gdyż już z nich nie korzystamy, ale ze względu na integralność bazy nie mogą być one usunięte (dane archiwalne). W takim przypadku zazwyczaj wystarczy dodanie pola (aktywny, archiwum, widoczny itp.), które steruje widocznością obiektu w aplikacji Druga najczęstsza sytuacja, to kontrola zmian danych wykonywanych przez użytkowników - w tym wypadku wystarczy stworzyć kopię wybranej tablicy z dodatkowymi polami przeznaczonymi na czas i rodzaj zmiany oraz kto wykonał daną zmianę. Natomiast w tablicy podstawowej (bazowej) należy dodać wywołania wyzwalaczy (trigger) - należy pamiętać aby ustawić je w odpowiedniej kolejności. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 75 / 77 Przydatne fragmenty modeli bazodanowych Wersjonowanie rekordów Wersjonowanie rekordów Tam gdzie potrzebna jest nam bardziej rozbudowana struktura wersjonowania rekordów, należy ją po przewidzieć na etapie projektowania i odpowiednio zaimplementować. Możemy np. potrzebować historii zmian w strukturze organizacyjnej danej instytucji, łącznie z np. powstaniem jednostek poprzez połączenie innych jednostek (w tym także z jednej jednostki poprzez zmianę nazwy)m podział jednostki na kilka innych itd. Co więcej może zaistnieć sytuacja, kiedy będziemy musieli się odwołać do tych danych. Sytuacja przykładowa: wydział zmienił nazwę, a następnie zgłosił się absolwent, który prosi o wydanie suplementu. Oczywiście na suplemencie taki musi być wydrukowany wydział jaki kończył student. G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 76 / 77 Przydatne fragmenty modeli bazodanowych Jeden model bazy na różnych platformach Jeden model bazy na różnych platformach różnice w typach danych (np. brak typu logicznego w niektórych systemach: FB, Oracle), Oracle - brak domen (są typy ale ich wykorzystanie do budowania tablic jest mało przydatne), różnice w SQL - SELECT praktycznie bez zmian w różnych bazach, tam gdzie się nie da ujednolicić należy zastosować perspektywy, brakujące elementy - tablica DUAL, wybrane funkcje występujące w jednej bazie należy stworzyć w drugiej (o ile są potrzebne), bardziej skomplikowane operacje - procedury )sposób wywołania procedur z poziomu języków programowania jest zazwyczaj ujednolicony dla różnych baz danych G. Arkit (WMIiE) Modelowanie bazodanowe (W) 15 grudnia 2013 77 / 77