Modelowanie danych , projektowanie systemu informatycznego
Transkrypt
Modelowanie danych , projektowanie systemu informatycznego
Wykład IV Modelowanie danych , projektowanie systemu informatycznego Modelowanie – odwzorowanie rzeczywistych obiektów świata rzeczywistego w systemie informatycznym. Modele - konceptualne reprezentacja obiektów w uniwersalnym modelu niezależnym od modelu implementacyjnego • model związków – encji ( diagramy ER ) • model UML - implementacyjne • modele wykorzystywane do implementacji modeli konceptualnych • modele danych ( relacyjne, obiektowe, itp. ) Obiekty świata rzeczywistego – materialne i niematerialne • materialne – pracownik, samochód, budynek, towar, mieszkanie • niematerialne – konto bankowe, zamówienie, polisa ubezpieczeniowa • zdarzenia – choroba pracownika, urlop, przyznanie nagrody • fakty – znajomość języka obcego, stan magazynowy towaru • • • • Modelowanie pojęciowe na encjach ( założenia:) świat składa się z obiektów – encji ęncje można pogrupować w typy każda encja ma własność służącą do jej identyfikacji encje są między sobą powiązane 1 Wykład IV Encja (ang. entity ) - reprezentuje zbiór obiektów w modelowanym fragmencie rzeczywistości, które posiadają te same cechy i są na tyle istotne, by trwale przechowywać o nich informacje. Cechy encji: • • • • • każda encja posiada własności zwane też atrybutami każda encja posiada unikalny identyfikator konkretny obiekt świata rzeczywistego jest reprezentowany jako wystąpienie encji ( instancja encji ) każda encja ma unikalną nazwę ( podawana w liczbie pojedynczej np. STUDENT ) dowolny obiekt jest reprezentowany wyłącznie przez jedną encję Zapis własności encji Związki określają zbiór asocjacji pomiędzy instancjami encji ( powiązania pomiędzy obiektami świata rzeczywistego ). Encje objęte danym związkiem są uczestnikami tego związku. Liczba uczestników w związku jest nazwana jego stopniem. Typy związków: • unarne, binarne, ternarne • obligatoryjne lub opcjonalne • jeden do jeden, jeden do wiele, wiele do wiele związki unarne wiążą instancję z instancją tej samej encji ( najczęściej reprezentują rekurencyjne powiązanie hierarchiczne) dla związków unarnych należy określić rolę jaką gra każda instancja encji w związku. 2 Wykład IV związki binarne wiążą instancje dwóch encji ( najczęściej spotykane ) związki ternarne wiążą instancje trzech encji Typ asocjacji określa liczbę instancji związku, w których może brać udział instancja encji asocjacja 1 : 1 każda instancja bierze udział w co najwyżej jednej instancji związku asocjacja 1 : N instancja jednej encji bierze udział w co najwyżej jednej instancji związku, instancja drugiej w dowolnej liczbie instancji związku asocjacja N : M instancje obu encji biorą udział w dowolnej liczbie instancji związku Opcjonalna przynależność do związku mogą istnieć instancje encji nie biorące udziału w żadnej instancji związku Obligatoryjna przynależność do związku wszystkie instancje encji muszą brać udział w instancji związku Zapis związków 3 Wykład IV Projektowanie systemu informatycznego Projekt fizyczny bazy danych jest realizowany przez informatyków na podstawie specyfikacji wymagań i modelu logicznego. Powiązany ze ściśle określonym Systemem Zarządzania Bazą Danych. Określa struktury logiczne i fizyczne. Efektem projektu fizycznego będą skrypty zawierające definicje: • • • • • tabel ograniczeń integralnościowych parametrów fizycznych bazy danych dodatkowych obiektów ( perspektywy, indeksy, sekwencje itp. ) użytkowników i ich uprawnień Dla relacyjnych baz danych narzędziem fizycznej realizacji będzie część SQL'a nazwana DDL ( ang. Data Definition Language ) zawierająca niezbędne polecenia do: tworzenia CREATE . . ., usuwania DROP . . . i modyfikacji ALTER . . . struktur danych. 4 Wykład IV CREATE TABLE [<schemat>.]< nazwa_tabeli > ( <własności_relacyjne >) [<własności_fizyczne>] [<własności_tabeli>] ; Definicja kolumn – własności relacyjnych tabeli CREATE TABLE [<schemat>.]< nazwa_tabeli > ( <nazwa_kolumny1> <typ> [ ( rozmiar )] [ DEFAULT < wyrażenie > ] [ < więzy_kolumny1> ] [, <nazwa_kolumny2 > . . . ] [, <więzy_tabeli>] ); Własności fizyczne tabeli CREATE TABLE < nazwa_tabeli > ( <własności_relacyjne > ) [ { < atrybuty_segmentu > [ < kompresja > ] | ORGANIZATION { < typ_organizacji_segmentu > } | CLUSTER < nazwa > ( < nazwa_kolumny1 [ , < kolumna2 ] . . . ) } ] ; przykłady: CREATE TABLE Tymczasem ( Kol1 NUMBER, Kol2 VARCHAR2(30) ); CREATE TABLE Mieszkancy ( Pesel NUMBER(11) NOT NULL, Nazwisko VARCHAR2(30), Imiona VARCHAR2(30), Data_zameldowania DATE DEFAULT Current_date ) ; CREATE TABLE Demo ( Id NUMBER( 10 ) ) TABLESPACE przykład STORAGE ( INITIAL 6144 ); CREATE TABLE Dzialy ( Id NUMBER( 2 ) PRIMARY KEY , Nazwa VARCHAR2( 50 ) , Lokalizacja VARCHAR2( 20 ) ) ORGANIZATION INDEX PCTHRESHOLD 30 OVERFLOW TABLESPACE Nadmiar ; 5 Wykład IV CREATE TABLE Klienci ( Id NUMBER( 6 ) , Nazwisko VARCHAR2( 50 ) , Imiona VARCHAR2( 30 ) , Kraj VARCHAR2( 30 ) , Email VARCHAR2( 25 ) ) PARTITION BY LIST ( Kraj ) ( PARTITION Azja VALUES ( 'CHINY' , ' TAJLANDIA') , PARTITION Europa VALUES ( 'NIEMCY' , 'WŁOCHY' ) , PARTITION Ameryka VALUES ( 'USA' , 'KANADA' ), PARTITION Reszta VALUES ( DEFAULT ) ); CREATE TABLE Pracownicy_archiwum AS SELECT * FROM Pracownicy WHERE Id_zesp = 20 ; Definiowanie ograniczeń ( więzów spójności ) sposoby : • dla kolumny – definiowane „inline” lub „out_of_line” (za wyjątkiem NOT NULL ) • dla tabeli – definiowane „out_of_line” • tworzone w poleceniu modyfikacji struktury tabeli – wyłącznie „out_of_line” • każde ograniczenie jest nazwane przez użytkownika lub przez system Definicja ograniczeń „inline” CREATE TABLE < nazwa_tabeli > ( < nazwa_kolumny1 > < typ> [ ( rozmiar) ] [ DEFAULT < wyrażenie >] [ [ CONSTRAINT < nazwa_ogr_kolumny > ] { [ NOT ] NULL | UNIQUE | PRIMARY KEY | REFERENCES < nazwa_tabeli > (< nazwa_kolumny1>[ ,< nazwa_kolumny2 > ] . . . ) [ ON DELETE { CASCADE | SET NULL } ] | CHECK ( <warunek_logiczny >) } [DISABLE | ENABLE ] ], . . ) ; przykłady: CREATE TABLE Stanowiska ( Stanowisko VARCHAR2(15) constraint pk_stanowiska PRIMARY KEY, Placa_min NUMBER(7,1) constraint war1 CHECK ( Placa_min > 1500), Placa_max NUMBER(7,1) NOT NULL, constraint war CHECK (Placa_max >= Placa_min)) ; CREATE TABLE Kursy ( Kod NUMBER(3) constraint p_kod PRIMARY KEY, Nazwa VARCHAR2(30) NOT NULL, Koszt NUMBER( 7,1) constraint c_koszt CHECK ( Koszt > 0 )); 6 Wykład IV CREATE TABLE Pracownicy_kursy ( Numer NUMBER(4) constraint fk_numer REFERENCES Pracownicy, Kod NUMBER(3) constraint fk_kod REFERENCES Kursy, constraint pk_pk PRIMARY KEY (Numer, Kod)); DROP TABLE [< schemat>.]<nazwa_tabeli > [ CASCADE CONSTRAINTS ] [ PURGE ] ; Polecenie powyższe • usuwa definicję tabeli i dane z tabeli oraz wyzwalacze, indeksy związane z tabelą • zwalnia fizyczny segment i jego rozszerzenia • ustawia atrybut niepoprawności dla powiązanych perspektyw, synonimów, procedur itp. ALTER TABLE . . . Dodanie kolumn ; ALTER TABLE < nazwa_tabeli > ADD ( < nazwa_kol1 >< typ> [ DEFAULT < wyrażenie > ] [< więzy_kol1>] [, < nazwa_kol2 > <typ> [ DEFAULT < wyrażenie > ] [< więzy_kol2>] . . . ) ; Modyfikacja kolumn; ALTER TABLE < nazwa_tabeli > MODIFY ( < nazwa_kol1 > <typ> [ DEFAULT < wyrażenie > ] [< więzy_kol1>] [, < nazwa_kol2 > <typ>[ DEFAULT < wyrażenie > ] [< więzy_kol2>] . . . ) ; Usunięcie kolumn; ALTER TABLE < nazwa_tabeli > DROP COLUMN < nazwa_kol1 > | ( < nazwa_kol1 > [, < nazwa_kol2 > ] . . . ) ; Zmiana nazwy kolumny; ALTER TABLE < nazwa_tabeli > RENAME COLUMN < stara_nazwa_kol > TO < nowa_nazwa_kol > ; przykłady: ALTER TABLE Dzialy DROP COLUMN Lokalizacja; ALTER TABLE Kursy ADD ( Data_rozpoczecia DATE, Data_zakonczenia DATE ) ; ALTER TABLE Stanowiska MODIFY ( Stanowisko VARCHAR2(40)) ; 7 Wykład IV Modyfikacja ograniczeń ALTER TABLE < nazwa_tabeli > { ADD CONSTRAINT < nazwa_ograniczenia > | PRIMARY KEY | UNIQUE (< nazwa_kol1> ) [, UNIQUE ( <nazwa_kol2 > ] | MODIFY CONSTRAINT < nazwa_ograniczenia > | PRIMARY KEY | UNIQUE (< nazwa_kol1> ) [, UNIQUE ( <nazwa_kol2 > ] | RENAME CONSTRAINT < stara_nazwa > TO < nowa_nazwa > | DROP { PRIMARY KEY | UNIQUE ( < nazwa_kol1 > [, < nazwa_kol2] . . . ) [ CASCADE ] [KEEP | DROP INDEX ] | CONSTRAINT < nazwa_ograniczenia > [ CASCADE ] } | ENABLE | DISABLE { PRIMARY KEY | CONSTRAINT < nazwa_ograniczenia > } } ; przykłady: ALTER TABLE Mieszkancy ADD CONSTRAINT Nr_dok UNIQUE ( Nr_dokumentu ) ; ALTER TABLE Rachunki ENABLE PRIMARY KEY ; Perspektywa ( WIDOK ) - wirtualna tabela Intuicyjnie, perspektywa jest pewnego rodzaju „ oknem „, przez które użytkownik bazy danych widzi udostępniane przez nią dane. • • • • perspektywa bazuje na tabelach, na innych perspektywach lub tabelach i perspektywach z użytkowego punktu widzenia, perspektywa posiada taką samą strukturę jak tabela na poziomie fizycznym różni się od tabeli tym, że nie posiada własnych danych w słowniku bazy danych (metadane ) perspektywa jest przechowywana w postaci zapytania ją definiującego Cele stosowania perspektyw • • • • • ograniczenie i autoryzacja dostępu do danych ułatwienie pracy z danymi możliwość prezentowania tych samych danych w różny sposób zapewnienie logicznej niezależności danych poprzez odseparowanie aplikacji od schematu konceptualnego bazy danych możliwość wprowadzenia dodatkowego poziomu ograniczeń integralnościowych ( klauzula WITH CHECK OPTION ) CREATE [ OR REPLACE ] VIEW < nazwa > [ ( <lista_kolumn > ) ] AS SELECT . . . [{ WITH READ ONLY | WITH CHECK OPTION }] ; 8 Wykład IV • • • wyrażenia nie będące kolumnami, z klauzuli SELECT podzapytania, muszą być zaopatrzone w aliasy lub perspektywa musi przewidzieć nowe nazewnictwo wszystkich kolumn wyniku podzapytania istnieje możliwość modyfikacji danych za pośrednictwem pod warunkiem, że polecenie będzie dla systemu jednoznaczne ( uniemożliwiają to grupowanie, funkcje, złączenia, podzapytania, porządkowanie, DISTINCT, wyrażenia złożone, brak klucza głównego, brak uprawnień, ograniczenie WITH READ ONLY) opcja WITH CHECK OPTION – umożliwia sprawdzenie, czy modyfikowane za pośrednictwem perspektywy dane spełniają warunki logiczne zawarte wewnątrz podzapytania perspektywy przykłady: CREATE OR REPLACE VIEW Zespoly_pracownicze ( nazwa, liczba_prac ) AS SELECT nazwa, count(nr_akt) FROM Pracownicy RIGHT JOIN Dzialy USING (id_dzialu) GROUP BY nazwa; CREATE OR REPLACE VIEW Szefowie ( nazwisko, stanowisko, staz ) AS SELECT nazwisko, stanowisko, trunc(months_between(sysdate, data_zatr)/12) FROM Pracownicy WHERE nr_akt IN ( SELECT DISTINCT kierownik FROM Pracownicy ); CREATE OR REPLACE VIEW Wynagrodzenia AS SELECT p.nr_akt, p.nazwisko, p.stanowisko, p.placa FROM Pracownicy p WHERE p.placa < ( SELECT placa FROM Pracownicy WHERE nr_akt = p.kierownik ) WITH CHECK OPTION constraint za_wysokie_wynagrodzenie ; CREATE OR REPLACE VIEW Studentki AS SELECT nr_albumu, nazwisko, imiona,rok, rodzaj_studiow FROM Studenci WHERE imiona LIKE '%A' AND rok IS NOT NULL ORDER BY nazwisko ; SELECT * FROM Szefowie WHERE staz >= 20 AND stanowisko = 'DYREKTOR' SELECT * FROM Studentki WHERE rok= 2 AND rodzaj_studiow =' INŻ_ST'; Dodatkowe polecenia języka SQL dotyczące perspektyw: DESCRIBE < nazwa_perspektywy > DROP VIEW <nazwa_perspektywy > ; UPDATE Wynagrodzenia SET placa= 5500 WHERE nazwisko='MALIK'; SQL Error: ORA-01402: naruszenie klauzuli WHERE dla perspektywy z WITH CHECK OPTION 01402. 00000 - "view WITH CHECK OPTION where-clause violation" 9 Wykład IV INSERT INTO Szefowie VALUES ('OLEJNIK','RADCA',null); SQL Error: ORA-01733: w tym miejscu kolumna wirtualna nie jest dozwolona 01733. 00000 - "virtual column not allowed here" Metadane ( perspektywy słownikowe ) - informacje na temat struktury bazy danych, zawartych w niej obiektów, kontach użytkowników, uprawnieniach, itp. Przedrostki perspektyw słownika danych: USER_ – obiekty posiadane przez użytkownika, ALL_ – obiekty, do których użytkownik ma dostęp, DBA_ – obiekty całej bazy danych Wybrane perspektywy słownika dla: • • • • • • • • tabel: %_TABLES ograniczeń: %_CONSTRAINTS kolumn z ograniczeniami: %_CONS_COLUMNS perspektyw: %_VIEWS aktualizacji perspektyw: %_UPDATABLE_COLUMNS indeksów: %_INDEXES sekwencji: %_SEQUENCES obiektów: %_OBJECTS przykłady: SELECT table_name,constraint_name, constraint_type,column_name FROM USER_CONSTRAINTS NATURAL JOIN USER_CONS_COLUMNS; SELECT * FROM USER_UPDATABLE_COLUMNS; SELECT Object_name, Object_type, Created, Status FROM USER_OBJECTS; Wykorzystano Wykłady dr inż. Olga Siedlecka-Lamch - Bazy danych z roku 2012 http://wazniak.mimuw.edu.pl/images/c/c7/BD-2st-1.2-w03.tresc-1.1.pdf 10