Bazy danych 1

Transkrypt

Bazy danych 1
Bazy danych 1
Wykład 5
Metodologia projektowania baz danych
(projektowanie logiczne)
Projektowanie logiczne –
przegląd krok po kroku
1.
2.
3.
4.
5.
6.
Usuń własności niekompatybilne z modelem
relacyjnym
Wyznacz relacje dla logicznego modelu danych
Wykonaj normalizację relacji
Sprawdź, czy relacje umoŜliwiają realizacje transakcji.
Wyznacz więzy integralności.
Omów logiczny model danych z uŜytkownikiem.
Projektowanie logiczne (krok 1)
1. Usuń własności niekompatybilne z
modelem relacyjnym
Związki złoŜone
Atrybuty wielowartościowe
Usunięcie związków złoŜonych
Personel
Rejestruje
Biuro
1..1
1..1
0..*
Klient
Personel
Przetwarza
Rejestruje
Rejestracja
1..1
0..*
0..*
1..1
Potwierdza
1..1
Klient
Biuro
1..1
Usunięcie atrybutów
wielowartościowych
Biuro
NrBiura
Adres
NrTel [1..3]
Biuro
NrBiura
Adres
Udostępnia
1..1
Telefon
1..3
NrTel
Projektowanie logiczne (krok 2)
2.
Wyznacz relacje dla logicznego modelu danych
Relacje będziemy opisywać za pomocą języka definiowania bazy
danych DDL (DataBase Definition Language)
Definicja (uproszczona) relacji w DDL zawiera:
nazwę relacji (w liczbie mnogiej),
ujętą w nawiasy listę prostych atrybutów relacji, klucz główny,
wszystkie klucze alternatywne i obce,
nazwę relacji zawierającą wskazany klucz obcy jako klucz
główny
listę atrybutów pochodnych wraz z wyraŜeniami definiującymi
sposób wyliczenia ich wartości.
Projektowanie logiczne (krok 2)
Przykład definicji relacji w DDL
Relacja_A
Relacja_B
Klucz_A
<pk>
AtrybutA1
Klucz_B
<pk>
Klucz_A
<fk>
AtrybutB1
Relacja_A (Klucz_A, AtrybutA1)
Primary Key Klucz_A
Relacja_B (Klucz_B, Klucz_A, AtrybutB1)
Primary Key Klucz_B
Foreign Key Klucz_A references Relacja_A(Klucz_A)
Projektowanie logiczne (krok 2)
– reguły transformacji
1.
Dla kaŜdej encji tworzymy schemat relacji (reprezentacją
relacji jest tabela). Najczęściej nazwa relacji jest taka
sama jak nazwa encji, tylko w liczbie mnogiej ze względu
na to, ze relacja zawiera wiele wystąpień obiektu.
2.
Atrybuty encji stają się atrybutami w schemacie relacji.
Atrybuty odpowiadające kluczom głównym stają się
kluczami głównymi relacji. Atrybuty opcjonalne stają się
kolumnami o dopuszczalnych wartościach NULL, atrybuty
obligatoryjne stają się kolumnami NOT NULL.
3.
Sposób tworzenia kluczy obcych zaleŜy od liczności
(krotności) oraz uczestnictwa encji w związku.
Reguły transformacji –
związki typu 1:1
Uczestnictwo obowiązkowe po obu stronach związku
A
1..1
1..1
B
- Klucz_B
- Klucz_A
Z encji A i B tworzymy jeden schemat relacji RAB, który zawiera atrybuty
obu encji, a kluczem głównym jest klucz główny encji A lub klucz
główny encji B.
RAB
Klucz_A <pk>
Klucz_B
Reguły transformacji –
związki typu 1:1
Uczestnictwo obowiązkowe po jednej stronie związku
A
- Klucz_A
1..1
0..1
B
- Klucz_B
Z encji A i B tworzymy schematy relacji RA i RB; do schematu RB
wstawiamy jako dodatkowy atrybut klucz główny ze schematu RA.
RA
RB
Klucz_A <pk>
Klucz_B <pk>
Klucz_A <fk>
Reguły transformacji –
związki typu 1:1
Uczestnictwo opcjonalne po obu stronach związku
A
0..1
0..1
- Klucz_A
B
- Klucz_B
Dopuszczalne róŜne rozwiązania:
-tworzymy relacje RA i RB przy czym klucz główny jednej z nich
umieszczamy w relacji drugiej jako klucz obcy (wartości NULL)
- tworzymy schematy relacji RA i RB, a związek reprezentujemy
nowym schematem RAB, który zawiera dwa klucze obce - klucz główny
relacji RA i klucz główny relacji RB
RA
Klucz_A <pk>
RB
RAB
Klucz_A <pk,fk1>
Klucz_B <pk,fk2>
Klucz_B <pk>
Reguły transformacji – związki
typu 1:1 z atrybutami
Przypadek gdy związek ma atrybuty
A
1..1
1..1
B
- Klucz_B
- Klucz_A
Zwiazek
- Atrybut_Zwiazku
Z encji A i B tworzymy schematy relacji RA i RB; związek reprezentujemy
schematem RAB, który zawiera dwa klucze obce – klucz główny ze
schematu RA i klucz główny ze schematu RB - oraz atrybuty związku
RA
RB
Klucz_A <pk>
Klucz_B <pk>
RAB
Klucz_A
<pk,fk1>
Klucz_B
<pk,fk2>
Atrybut_Zwiazku
Reguły transformacji – związki
rekurencyjne typu 1:1
Uczestnictwo obowiązkowe po obu stronach związku
1..1
Rola2
A
- Klucz_A
1..1
Rola1
Tworzymy jeden schemat relacji RA zawierający dwie kopie klucza
głównego. Jedna kopia jest kluczem obcym i powinna mieć nazwę
wskazującą na reprezentowany związek (rola).
RA
Klucz_A
<pk>
Rola1_Klucz_A <fk1>
Reguły transformacji – związki
rekurencyjne typu 1:1
Uczestnictwo opcjonalne po jednej stronie związku
1..1
Rola2
A
- Klucz_A
0..1
Rola1
Tworzymy schemat relacji RA z kluczem głównym odpowiadającym
kluczowi głównemu encji A oraz schemat RAA, który zawiera dwa
klucze obce – klucze główne ze schematu RA - opatrzone rolą, którą
encja sprawuje w związku.
RA
RAA
Klucz_A <pk>
Rola1_Klucz_A <pk,fk1>
Rola2_Klucz_A <pk,fk2>
Reguły transformacji – związki
rekurencyjne typu 1:1
Uczestnictwo opcjonalne po obu stronach związku
0..1
Rola2
A
- Klucz_A
0..1
Rola1
Tworzymy schemat relacji RA z kluczem głównym odpowiadającym
kluczowi głównemu encji A oraz schemat RAA, który zawiera dwa
klucze obce – klucze główne ze schematu RA - opatrzone rolą, którą
encja sprawuje w związku.
RA
RAA
Klucz_A <pk>
Rola1_Klucz_A <pk,fk1>
Rola2_Klucz_A <pk,fk2>
Reguły transformacji – związki
rekurencyjne typu 1:1 z atrybutami
Przypadek gdy związek ma atrybuty
1..1
Rola2
A
- Klucz_A
1..1
Rola1
Zwiazek
- Atrybut_Zwiazku
Tworzymy schemat relacji RA z kluczem głównym odpowiadającym
kluczowi głównemu encji A oraz schemat RAA, który zawiera dwa
klucze obce – klucze główne ze schematu RA - opatrzone rolą, którą
encja sprawuje w związku oraz atrybuty związku.
A
RAA
Klucz_A <pk>
Rola1_Klucz_A <pk,fk1>
Rola2_Klucz_A <pk,fk2>
Atrybut_Zwiazku
Reguły transformacji –
związki typu 1:*
Uczestnictwo obowiązkowe po stronie wiele związku
A
- Klucz_A
1..1
0..*
B
- Klucz_B
Z encji A i B tworzymy schematy relacji RA i RB; do schematu RB
wstawiamy jako dodatkowy atrybut klucz główny ze schematu RA.
RA
RB
Klucz_A <pk>
Klucz_B <pk>
Klucz_A <fk>
Reguły transformacji –
związki typu 1:*
Uczestnictwo opcjonalne po stronie wiele związku
A
0..1
0..*
- Klucz_A
B
- Klucz_B
• jak wyŜej
• Z encji A i B tworzymy schematy relacji RA i RB, jeśli duŜo wystąpień
encji B nie uczestniczy w związku, to związek reprezentujemy schematem
RAB, który zawiera dwa klucze obce – klucz główny ze schematu RA i
klucz główny ze schematu RB.
RA
Klucz_A <pk>
RB
RAB
Klucz_A <pk,fk1>
Klucz_B <pk,fk2>
Klucz_B <pk>
Reguły transformacji – związki
typu 1:* z atrybutami
Uczestnictwo obowiązkowe po stronie wiele związku
A
1..1
B
0..*
- Klucz_A
- Klucz_B
Zwiazek
- Atrybut_Zwiazku
Z encji A i B tworzymy schematy relacji RA i RB; do schematu RB
wstawiamy jako dodatkowy atrybut klucz główny ze schematu RA
oraz atrybuty związku.
RA
RB
Klucz_A <pk>
Klucz_B
<pk>
Klucz_A
<fk>
Atrybut_Zwiazku
Reguły transformacji – związki
typu 1:* z atrybutami
Uczestnictwo opcjonalne po stronie wiele związku
A
0..1
0..*
- Klucz_A
B
- Klucz_B
• Z encji A i B tworzymy schematy relacji RA i RB, jeśli duŜo wystąpień
encji B nie uczestniczy w związku, to związek reprezentujemy schematem
RAB, który zawiera dwa klucze obce – klucz główny ze schematu RA i
klucz główny ze schematu RB oraz atrybuty związku.
RA
RB
Klucz_A <pk>
Klucz_B <pk>
RAB
Klucz_A
<pk,fk1>
Klucz_B
<pk,fk2>
Atrybut_Zwiazku
Reguły transformacji – związki
typu *:* (bez i z atrybutami)
Uczestnictwo opcjonalne po obu stronach
A
0..*
0..*
- Klucz_A
B
- Klucz_B
Zwiazek
- Atrybut_Zwiazku
•Z encji A i B tworzymy schematy relacji RA i RB, związek reprezentujemy
schematem RAB, który zawiera dwa klucze obce – klucz główny ze
schematu RA i klucz główny ze schematu RB (oraz atrybuty związku).
RA
RB
Klucz_A <pk>
Klucz_B <pk>
RAB
Klucz_A
<pk,fk1>
Klucz_B
<pk,fk2>
Atrybut_Zwiazku
Reguły transformacji – związki rekurencyjne typu *:* (bez i z atrybutami)
Uczestnictwo opcjonalne po obu stronach
0..*
Rola2
A
- Klucz_A
0..*
Rola1
Zwiazek
- Atrybut_Zwiazku
• Z encji A schemat relacji RA, związek reprezentujemy schematem RAA,
który zawiera dwa klucze obce – klucze główne ze schematu RA
opatrzone rolą, którą encja sprawuje w związku (oraz atrybuty związku).
RA
RAA
Klucz_A <pk>
Rola1_Klucz_A <pk,fk1>
Rola2_Klucz_A <pk,fk2>
Atrybut_Zwiazku
Przekształcenie uogólnienia
w schemat relacyjny
Metoda 1:
tworzymy tabele: jedną dla nadklasy i po jednej dla kaŜdej podklasy;
w tabelach podklas wstawiamy klucz tabeli nadklasy (jako klucz obcy).
Wykorzystanie praktyczne:
Schemat relacyjny uzyskany w ten sposób jest najlepszy z punktu
widzenia normalizacji, moŜe on być jednak niewydajny przy częstych
złączeniach tabeli nadrzędnej z tabelami podrzędnymi.
Metoda ta moŜe przynieść dobre wyniki, jeśli:
podklasy znacznie róŜnią się od siebie (mają wiele róŜnych
atrybutów);
podklasy są silnie przecinające się (jest wiele obiektów, które
jednocześnie naleŜą do więcej niŜ jednej podklasy) – wówczas
łatwiej uniknąć jest niespójności danych (np. określona osoba moŜe
być jednocześnie naleŜeć do klasy Student i Pracownik; modyfikując
jej dane, na przykład atrybut „Email”, mamy pewność, Ŝe wystarczy
nanieść zmiany w jednym miejscu: w tabeli [Osoba]).
Przekształcanie uogólnienia
w schemat relacyjny – metoda 1
Diagram klas
Schemat relacji
Przekształcanie hierarchii
uogólnienia w schemat relacyjny
Metoda 2:
tworzymy po jednej tabeli dla kaŜdej podklasy;
do kaŜdej tabeli wstawiamy wszystkie atrybuty nadklasy.
Wykorzystanie praktyczne:
Stosujemy te metodą, gdy kaŜde wystąpienie nadklasy musi
naleŜeć do przynajmniej jednej podklasy oraz podklasy dość
znacznie róŜnią się
Schemat ten jest wydajnie przetwarzany, jeśli są częste
odwołania do tabel powstałych z podklas (unikamy złączeń
tabel).
Posługując się tą metodą tracimy zysk z zamodelowanego
wcześniej uogólnienia (dziedziczenia) – na przykład system nie
rozpoznaje faktu, Ŝe obiekt zapisany w tabeli Student i Pracownik
moŜe być samą osobą.
Przekształcanie uogólnienia
w schemat relacyjny – metoda 2
Diagram klas
Schemat relacji
Przekształcanie hierarchii
uogólnienia w schemat relacyjny
Metoda 3:
tworzymy dwie tabele: jedna reprezentuje nadklasę, a druga
podklasy,
do drugiej tabeli wstawiamy wszystkie atrybuty podklas oraz
klucz główny nadklasy jako klucz obcy;
w razie potrzeby dodajemy pole rozróŜniające, informujące, z
której podklasy pochodzi dany obiekt.
Wykorzystanie praktyczne:
Rozwiązanie to moŜe być zastosowane tylko wtedy, gdy podklasy
róŜnią się między sobą minimalnie (np. pojedynczymi atrybutami)
oraz wystąpienie nadklasy nie musi naleŜeć do Ŝadnej z podklas.
Przekształcanie uogólnienia
w schemat relacyjny – metoda 3
Osoba
Id_Osoby
Imie
Nazwisko
NIP
PESEL
itd.
integer
<pk>
varchar
varchar
varchar
varchar
<Undefined>
Pracownik_Student
Id_Osoby
Nr_Pracownika
Nr_Indeksu
Data_Zapisania
Data_Wypisania
Tytul
Stanowisko
Data_Zatrudnienia
Okres_Zatrudnienia
itd.
int
<fk>
int
int
date
date
varchar
varchar
date
int
<Undefined>
Przekształcanie hierarchii
uogólnienia w schemat relacyjny
Metoda 4:
tworzymy jedną tabelę;
wstawiamy do niej wszystkie atrybuty z nadklasy i podklas;
w razie potrzeby dodajemy pole rozróŜniające, informujące, z
której podklasy pochodzi dany obiekt.
Wykorzystanie praktyczne:
Rozwiązanie to moŜe być zastosowane tylko wtedy, gdy
podklasy róŜnią się między sobą minimalnie (np. pojedynczymi
atrybutami), a wystąpienie nadklasy naleŜy przynajmniej do
jednej z podklas
W przeciwnym razie w wierszach moŜe występować wiele
wartości NULL (jest to bardzo niekorzystne z punktu widzenia
normalizacji schematu relacyjnego i potencjalnych anomalii przy
aktualizacji danych).
Przekształcanie uogólnienia
w schemat relacyjny – metoda 4
Diagram klas
Schemat relacji
Dodatkowe
pole
rozróŜniające
Dziękuję za uwagę!!!