Zasady transformacji modelu DOZ do projektu tabel bazy danych A. Obiekty proste B. Obiekty z podtypami C. Związki rozłączne GHJ 1
A. Projektowanie - obiekty proste TRASA # * numer POZYCJA o planowana godzina ZAM odlotu z do początkiem końcem LOTNISKO # * kod * nazwa obsługiwana przez przewoźnikiem na LINIA LOTNICZA # * kod * nazwa wewnątrz nadrzędną GHJ 2
A. Projektowanie obiekty proste - reguły Krok 1. Przekształć każdy prosty obiekt (nie jest podtypem i nie zawiera podtypów) w tabelę Nazwij tabelę stosując liczbę mnogą nazwy obiektu. Krok 2. Przekształć każdy atrybut w kolumnę o tej samej nazwie, sprecyzowanym formacie i długości Atrybuty opcjonalne przechodzą w kolumny null, atrybuty obowiązkowe w kolumny not-null GHJ 3
Krok 3. Składowe unikalnego identyfikatora obiektu - klucz główny (pierwotny) tabeli Jeżeli obiekt jest identyfikowany przez uczestnictwo w związku, dołącz do tabeli kopie składowych unikalnego identyfikatora obiektu, który jest na drugim końcu związku (może to być proces rekurencyjny) W nazwach dołączonych kolumn wykorzystaj nazwy obiektów i/lub związków, dodając je do nazw atrybutów GHJ 4
Krok 4. Związki N:1 oraz 1:1 stają się kluczami obcymi (zewnętrznymi) Należy dołączyć do odpowiedniej tabeli kopie składowych unikalnego identyfikatora obiektu znajdującego się po stronie końca 1 tego związku Związki opcjonalne tworzą kolumny null. Związki obowiązkowe tworzą kolumny not-null. GHJ 5
Projekt tabel przykład: obiekty proste LOTNISKA Kod char 4 not null G Nazwa char 40 not null LINIE_LOTNICZE Kod char 4 not null G Nazwa char 40 not null Kod_linia_lotnicza_ char 4 null O nadrzędna TRASY_LOTU Numer integer 4 not null G Kod_linia_lotnicza char 4 not null G, O Kod_lotnisko_początkiem char 4 not null O Kod_lotnisko_końcem char 4 not null O Planowana_godzina_ date null odlotu GHJ 6
Definicja perspektywy Perspektywa (relacja wirtualna) jest strukturą logiczną umożliwiającą dostęp do podzbioru jednej lub wielu tabel, umożliwiającym tratowanie jej jako odrębnej tabeli (ale bez indeksów) Przechowywana w bazie danych w postaci definicji napisanej za pomocą języka DDL (zwykle SQL) Powstaje w momencie wykonywania na niej operacji Nazwy kolumn perspektywy mogą być inne niż bazowych tabel GHJ 7
Zastosowanie perspektyw Autoryzacja dostępu do danych Ułatwienie dostępu do danych Prezentacja tych samych danych w różny sposób (w definicji mogą wystąpić wyrażenia arytmetyczne operujące na danych z tabel, zmiana formatu do prezentacji) Dodatkowy poziom ograniczeń integralnościowych GHJ 8
Tworzenie perspektywy Podstawowe operatory relacji selekcja projekcja połączenie unia przecięcie różnica GHJ 9
B. Projektowanie z podtypami POZYCJA ZAMÓWIENIA POZYCJA PRODUKTU * ilość dotyczy zawarty w PRODUKT # * kod INNA POZYCJA o komentarz częścią # * numer o opis złożone z ZAMÓWIENIE # * numer GHJ 10
B. Projektowanie z podtypami - reguły I. Jedna tabela Proces projektowania należy przeprowadzić dla każdego podtypu, wszystkich podtypów każdego podtypu itd.. 3. Utwórz tabelę tylko dla zewnętrznego nadtypu i opcjonalne perspektywy relacyjne dla każdego podtypu, które umożliwią przetwarzanie tylko danych należących do danego podtypu. 4. Dołącz do tabeli kolumny dla atrybutów i związków nadtypu (patrz A. 1,2,3,4). GHJ 11
B. Projektowanie z podtypami c.d. 1. Dołącz kolumny utworzone dla atrybutów i związków podtypów, wszystkie są null. Warunek spójności powinien być dodany albo w oprogramowaniu albo w definicji perspektywy 2. Dołącz dodatkową kolumnę not-null, jako część klucza głównego tabeli, w celu wskazania rodzaju podtypu GHJ 12
I. Tabele dla podtypów 3. Utwórz tabelę dla każdego podtypu. W przypadku kilku poziomów tabele są zwykle tworzone tylko dla pierwszego poziomu, a niższe poziomy są obsługiwane przez perspektywy. 4. Dołącz kolumny do każdej tabeli według postępowania A.1, 2, 3, 4. 5. Gdy podtyp jest równocześnie nadtypem tworzone są opcjonalne kolumny dla każdego jego podtypu (patrz B.3, 4) 6. Zdefiniuj perspektywę UNION dla potrzeb przetwarzania wszystkich danych należących do nadtypu. GHJ 13
Projekt tabel: I. Jedna tabela POZYCJE_ZAMÓWIENIA Numer_pozycja integer 4 not null G Numer_zamówienie integer 9 not null G,O Typ char 2 not null G Kod_produkt char 6 null O Opis char 40 null Komentarz char 40 null Ilość number 6,0 null Typ: PZ dla nadtypu, PP i IP dla podtypów GHJ 14
Definicje perspektyw dla I CREATE VIEW INNE_POZYCJE AS SELECT numer_pozycja numer_zamówienie opis komentarz typ FROM POZYCJE_ZAMÓWIENIA WHERE typ = IP CREATE VIEW POZYCJE_PRODUKTU AS SELECT numer_pozycja numer_zamówienie opis ilość kod_produkt typ FROM POZYCJE_ZAMÓWIENIA WHERE typ = PP AND ilość NOT NULL GHJ 15
Projekt tabel: II. Oddzielne tabele POZYCJE_PRODUKTU Numer_pozycja integer 4 not null G Numer_zamówienie integer 9 not null G,O Opis char 40 null Kod_produkt char 6 not null O Ilość number 6,0 not null INNE_POZYCJE Numer_pozycja integer 4 not null G Numer_zamówienie integer 9 not null G,O Opis char 40 null Komentarz char 40 null GHJ 16
Definicje perspektyw dla II CREATE VIEW POZYCJE_ZAMÓWIENIA AS SELECT * FROM POZYCJE_PRODUKTU UNION SELECT * FROM INNE_POZYCJE GHJ 17
C. Związki rozłączne KONTO # * numer należy do posiada OSOBA # * kod własnością właścicielem FIRMA # * kod GHJ 18
C. Związki rozłączne - reguły I. Wspólna dziedzina: jeżeli wszystkie klucze obce mają tą samą dziedzinę (identyczny format i długość) Utwórz dwie kolumny w tabeli odpowiadającej obiektowi po stronie łuku w związku identyfikator związku rozróżnia związki w łuku identyfikator obiektu przechowuje wartość unikalnego identyfikatora obiektu na drugim końcu tego związku GHJ 19
Projekt tabel: I. Wspólna dziedzina KONTA Numer integer 11 not null G Związek char 1 not null O Kod char 13 not null O Związek: O OSOBA, F - FIRMA GHJ 20
C. Związki rozłączne c.d. I. Jawny klucz obcy klucze obce nie mają tej samej dziedziny. Utwórz kolumny null jawnego klucza obcego dla każdego związku objętego tym łukiem. Kod aplikacji musi zapewnić warunek spójności: wprowadzana jest tylko jedna wartość i wartość ta jest na pewno wprowadzona w przypadku związków obowiązkowych. GHJ 21
Projekt tabel: II. Jawny klucz obcy KONTA Numer integer 11 not null G Kod_osoby char 10 null O Kod_firmy char 13 null O GHJ 22
Indeks Środek dostępu do jednego lub kilku wierszy tabeli. Implementowany za pomocą struktury B-tree. Może składać się z jednej lub kilku kolumn. GHJ 23
Projekt indeksów Utwórz indeksy dla: klucza głównego indeks jednoznaczny klucza obcego - indeks wieloznaczny kluczy ustalonych na podstawie macierzy powiązań Funkcja/Atrybut Klucz główny jak i obcy może składać się z więcej niż jednej kolumny indeks wielokolumnowy Wynikiem szczegółowej analizy definicji funkcji może być użycie innych atrybutów dla potrzeb warunków selekcji, najczęściej używane powinny być zdefiniowane jako indeksy GHJ 24
Indeksy dla przykładu z lotniskiem LOTNISKA kod indeks jednoznaczny LINIE LOTNICZE kod indeks jednoznaczny LINIE LOTNICZE kod_linii_lotniczej_ nadrzędna indeks niejednoznaczny TRASY LOTÓW numer_lotu kod_linii_ lotniczej wielokolumnowy indeks jednoznaczny TRASY LOTÓW kod_lotniska_ początkiem_ indeks niejednoznaczny TRASY LOTÓW kod_lotniska końcem indeks niejednoznaczny GHJ 25