TRANSFORMACJA DO SCHEMATU RELACYJNEGO pojęcia podstawowe Repetytorium pojęcia podstawowe relacyjnego modelu danych Schemat implementacyjny (logiczny) bazy danych: schemat, na którym działają aplikacje. Relacja (tablica): dwuwymiarowa tablica będąca implementacją encji. Kolumny tablicy są atrybutami. Wiersze tablicy to krotki - reprezentują wystąpienia encji. Atrybut: cecha lub własność encji, kolumna relacji lub pole rekordu. Klucz potencjalny: atrybut lub zbiór atrybutów, które mogą w sposób unikalny identyfikować krotki relacji. Klucz podstawowy (główny) (identyfikator): atrybut lub zbiór atrybutów wybrany spośród kluczy potencjalnych do identyfikacji krotek relacji. Klucz obcy: atrybut lub zbiór atrybutów relacji, który jest kluczem podstawowym w innej relacji. Klucz obcy służy do logicznego powiązania krotek dwóch relacji. Transformacja encji ownika o adres_ulica o adres_miasto id_pracownika PRIMARY KEY, imię NOT NULL, nazwisko NOT NULL, adres_ulica NULL, adres_miasto NULL ) 95 97 Transformacja do schematu relacyjnego - scenariusz 1. Transformacja encji Dla każdej encji, która nie tworzy hierarchii encji, utwórz relację odwzorowując atrybuty encji na nazwy kolumn relacji. Utwórz klucz podstawowy relacji na podstawie unikalnego identyfikatora encji Hierarchie encji transformuj zgodnie z odpowiednimi regułami. 2. Transformacja związków 1:1 Dla związków jednostronnie obligatoryjnych, dodaj klucz obcy do relacji powstałej z encji wiązanej obligatoryjnie, na podstawie klucza podstawowego drugiej relacji. Dla związków dwustronnie opcjonalnych, dodaj klucz obcy do relacji o przewidywanej mniejszej liczbie krotek. 3. Transformacja związków 1:N Dodaj klucz obcy do relacji po stronie N, na podstawie klucza podstawowego relacji po stronie 1. 4. Transformacja związków M:N i ternarnych Dla każdego związku utwórz nową relację, zawierającą klucze obce zbudowane na podstawie kluczy podstawowych wiązanych relacji. 96 Transformacja związków 1:1 Związek 1:1 jednostronnie obligatoryjny SPRZEDAŻ TOWARU # numer_sprzedaży * data_sprzedaży * wartość wycofana dotyczy ZWROT TOWARU # id_zwrotu * data o przyczyna Zasady transformacji: SPRZEDAŻE ( id_sprzedaży PRIMARY KEY, data_sprzedaży NOT NULL, wartość NOT NULL ) ZWROTY ( id_zwrotu PRIMARY KEY, data_zwrotu NOT NULL, przyczyna NULL id_sprzedaży NOT NULL REFERENCES sprzedaże(id_sprzedaży) ) 98
Transformacja związków 1:1 Związek 1:1 dwustronnie opcjonalny A # id_a B # id_b Transformacja związków 1:N cd. 99 101 Transformacja związków 1:N ownika zatrudniony na zajmowane STANOWISKO # nazwa * płaca_min o płaca_max STANOWISKA ( nazwa PRIMARY KEY, płaca_min NOT NULL, płaca_max NULL ) id_pracownika PRIMARY_KEY, imię NOT NULL, nazwisko NOT NULL, stanowisko NOT NULL REFERENCES stanowiska(nazwa) ) Transformacja związków M:N ownika bierze udział w realizowany PROJEKT # nazwa_proj * data_rozpocz o data_zakoncz id_pracownika PRIMARY_KEY, imię NOT NULL, nazwisko NOT NULL ) PROJEKTY ( nazwa_proj PRIMARY KEY, data_rozpocz NOT NULL, data_zakoncz NULL ) UDZIAŁY_W_PROJ ( id_pracownika REFERENCES pracownicy(id_pracownika), nazwa_proj REFERENCES projekty(nazwa_proj), PRIMARY KEY(id_pracownika, nazwa_proj) ) 100 102
Transformacja związków M:N Transformacja związków ternarnych cd. Stopień asocjacji typu "jeden" przy jednej encji ROLA bierze udział w PROJEKT # nazwa_proj pełniona realizowany # nazwa Zasady transformacji: UDZIAŁY_W_PROJ ( id_prac NOT NULL REFERENCES pracownicy(id_prac), projekt NOT NULL REFERENCES projekty(nazwa_proj), rola REFERENCES role(nazwa), PRIMARY KEY (id_prac, nazwa_proj) ) 103 105 Transformacja związków ternarnych Stopień asocjacji typu "wiele" przy wszystkich encjach bierze udział w ROLA PROJEKT # nazwa_proj realizowany pełniona # nazwa Zasady transformacji: UDZIAŁY_W_PROJ ( id_prac NOT NULL REFERENCES pracownicy(id_prac), projekt NOT NULL REFERENCES projekty(nazwa_proj), rola NOT NULL REFERENCES role(nazwa), PRIMARY KEY (id_prac, projekt, rola) ) 104 Transformacja związków rekurencyjnych Rekurencyjny związek 1:1 jest współmałżonkiem jest współmałżonkiem, id_małż REFERENCES pracownicy(id_prac)) Rekurencyjny związek 1:N podlega kieruje, id_szefa REFERENCES pracownicy(id_prac) ) 106
Transformacja związków rekurencyjnych cd. Rekurencyjny związek M:N LEK # id_leku * nazwa_leku o uwagi jest odpowiednikiem zastępowany ODPOWIEDNIKI ( id_leku NOT NULL REFERENCES leki(id_leku), id_odp NOT NULL REFERENCES leki(id_leku), PRIMARY KEY(id_leku,id_odp) ) Zasady transformacji związków rekurencyjnych analogicznie jak w przypadku związków 1:1, 1:N oraz M:N. 107 Transformacja hierarchii encji do trzech relacji Perspektywy dla specjalizacji: PRACOWNICY_KRAJOWI (id_prac, atr_specyf_kraj) AS select id_prac, atr_specyf_kraj from PRACOWNICY p, PRACOWNICY_KRAJ pk where p.id_prac = pk.id_prac; PRACOWNICY_ZAGRANICZNI (id_prac, atr_specyf_zagr) AS select id_prac, atr_specyf_zagr from PRACOWNICY p, PRACOWNICY_ZAGR pz where p.id_prac = pz.id_prac; 109 Transformacja hierarchii encji do trzech relacji Hierarchia encji: atrybuty_wspólne KRAJOWY ZAGRANICZNY atr_specyf_kraj atr_specyf_zagr Schematy relacji: typ_prac NOT NULL ) PRACOWNICY_KRAJ ( atr_specyf_kraj ) PRACOWNICY_ZAGR ( atr_specyf_zagr ) Transformacja hierarchii encji do dwóch relacji Hierarchia encji: atrybuty_wspólne KRAJOWY ZAGRANICZNY atr_specyf_kraj atr_specyf_zagr Schematy relacji: PRACOWNICY_KRAJ ( atr_specyf_kraj ) PRACOWNICY_ZAGR ( atr_specyf_zagr ) 108 110
Transformacja hierarchii encji do dwóch relacji Perspektywa dla generalizacji: PRACOWNICY (id_prac, typ_prac) AS select id_prac, 'KRAJ' from PRACOWNICY_KRAJ union select id_prac, 'ZAGR' from PRACOWNICY_ZAGR; Transformacja hierarchii encji do jednej relacji Perspektywy dla specjalizacji: PRACOWNICY_KRAJOWI (id_prac, atr_specyf_kraj) AS select id_prac, atr_specyf_kraj from PRACOWNICY where typ_prac = 'KRAJ'; PRACOWNICY_ZAGRANICZNI (id_prac, atr_specyf_zagr) AS select id_prac, atr_specyf_zagr from PRACOWNICY where typ_prac = 'ZAGR'; 111 113 Transformacja hierarchii encji do jednej relacji Hierarchia encji: atrybuty_wspólne KRAJOWY ZAGRANICZNY atr_specyf_kraj atr_specyf_zagr Schematy relacji: atr_specyf_kraj NULL, atr_specyf_zagr NULL, typ_prac NOT NULL ) Transformacja łuków - związków wykluczających się NAPRAWA dotyczy ŚRODEK TRWAŁY dotyczy ELEMENT WYPOSAŻENIA Metoda 1: Współdzielony klucz obcy gdy importowane klucze mają tą samą dziedzinę wartości NAPRAWA ( numer_naprawy INTEGER(6) PRIMARY KEY,, rodzaj_naprawy CHAR(2) NOT NULL CHECK(rodzaj_naprawy in ('ŚT', 'EW')), id_elementu INTEGER(8) ) 112 114
Transformacja łuków - związków wykluczających się Metoda 2: Jawne klucze obce gdy importowane klucze mają różne dziedziny wartości NAPRAWA ( numer_naprawy INTEGER(6) PRIMARY KEY,, kod_środka_trw CHAR(5) REFERENCES środki_trwałe(kod_śr), id_wyposażenia INTEGER(8) REFERENCES wyposażenie(id_wyp) ) 115 Normalizacja Niewłaściwe zaprojektowanie schematów relacji może być przyczyną dublowania się danych, ich niespójności i anomalii podczas ich aktualizowania Przykłady anomalii PRACOWNICY id_prac nazwisko adres numer_działu nazwa_działu Anomalia wstawiania: 116