Professional Documents
Culture Documents
Vertabelo PL
Vertabelo PL
W dzisiejszej lekcji wykonamy przykładowy diagram związków encji w Vertabelo. Omówimy kolejno
tworzenie encji, atrybutów i związków, ponadto poruszymy temat redundancji danych, normalizacji,
liczebności związków, związki rekurencyjne, encje asocjacyjne oraz dziedziczenie. Podczas tej lekcji
wykonamy poniżej przedstawiony diagram.
Wybrane pojęcia:
Diagram związków encji (ang. ERD - Entity Relationships Diagram) – diagram przedstawiający
wymagania informacyjne danej bazy danych, abstrahując od szczegółów technicznych. Tworzy się go
przed rozpoczęciem implementacji bazy danych i wchodzi on później w skład dokumentacji projektu.
Encja (eng. entity) – obiekt, coś co istnieje, co jest odróżnialne od innych, o czym informację trzeba
znać lub przechowywać. Reprezentacją graficzną encji jest ramka (prostokąt).
Klucz główny - jedna lub więcej kolumn zawierająca unikalną/niepowtarzalną wartość, która
jednoznacznie identyfikuje cały wiersz (czyli dany rekord w bazie danych). Każda encja/tabela musi
posiadać klucz główny.
Klucz obcy - jedna lub więcej kolumn, których wartości występują w innej tabeli jako klucz główny.
Służą one jako wskaźnik/referencja do wierszy w innej tabeli.
Normalizacja - Każdy fakt przechowywany w bazie danych powinien być wyrażalny w niej tylko na
jeden sposób.
Pierwsze kroki w Vertabelo.
Jeśli jeszcze tego nie zrobiliście, to załóżcie sobie konto Vertabelo (instrukcja tutaj).
Klikamy na 3-cią ikonkę z górnego paska po czym klikamy w dowolne miejsce na obszarze diagramu.
(jeśli chcemy anulować wstawianie encji należy kliknąć na ikonkę kursora, pierwsza od lewej).
W okienku po prawej stronie ekranu zmieniamy nazwę naszej nowo utworzonej encji na „Osoba”.
Niżej możemy kliknąć + Add column aby utworzyć atrybuty dla naszej encji.
Nazywając encje zawsze nadajemy im nazwy w liczbie pojedynczej tak jak „Osoba”, a nie „Osoby”.
3. Tworzenie atrybutów
Po kliknięciu + Add column pojawi nam się nowy atrybut, będzie on kolumną w tabeli w naszej bazie
danych.
W pierwszym polu możemy zmienić nazwę atrybutu. Jako, że robimy encję „Osoba”, stwórzmy
atrybut „Imie”. Klikając na ikonkę koła zębatego możemy wybrać typ atrybutu.
Jako, że chcemy aby nasz atrybut „Imie” był Stringiem: wybieramy opcję „varchar2(%)” i podajemy
jego długość w polu Length, np. 20.
W naszym przypadku, jako że robimy encję „Osoba” możemy użyć do tego numeru PESEL.
Rys. 10. Ustawianie klucza głównego Rys. 11. Encja z kluczem głównym
Tworzymy w tym celu nowy atrybut i zaznaczamy checkbox PK (primary key). Jako, że pesel jest za
długi by mieć typ intetger, wybieramy typ char(11).
Jako klucz główny w encji „Zwierzak” możemy stworzyć atrybut „Id” o typie integer.
6. Tworzenie związku między encjami
Kiedy mamy już dwie encje chcemy je ze sobą połączyć. Załóżmy, że chcemy aby nasza baza danych
przechowywała informacje o tym kto jest właścicielem danego zwierzaka.
Klikamy na 4-tą ikonkę z górnego paska po czym klikamy na encję „Osoba” i trzymając wciśnięty lewy
przycisk myszy przeciągamy kursor na encję „Zwierzak”. Po puszczeniu przycisku utworzy się związek
między naszymi encjami.
W oknie po prawej stronie, w polu „Cardinality” można zmieniać liczebność związku, do liczebności
wrócimy w punkcie 8.
7. Klucz obcy
Po utworzeniu związku, w encji „Zwierzak” pojawił nam się automatycznie dodany atrybut
„Osoba_Pesel”. Jest to klucz obcy (ang. FK – foreign key), który pozwala na zidentyfikowanie rekordu
z innej tabeli.
Rys. 14. Encja zawierająca klucz obcy „Osoba_Pesel”. Rys. 15. Zmieniona nazwa klucza obcego na „Wlasciciel”.
W przypadku naszego diagramu, liczebność 0..* oznacza, że Osoba może być właścicielem dowolnej
liczby zwierzaków (lub może nie mieć ich wcale).
Związek jedno-jednoznaczny 0..1
W przypadku naszego diagramu, liczebność 0..1 oznacza, że Osoba może być właścicielem tylko
jednego zwierzaka (lub może nie mieć ich wcale).
W przypadku naszego diagramu, liczebność 1..1 oznacza, że Osoba musi być właścicielem dokładnie
jednego zwierzaka (nie może nie mieć ich wcale).
W przypadku naszego diagramu, liczebność 1..* oznacza, że Osoba może być właścicielem jednego
lub więcej zwierzaków (nie może nie mieć ich wcale).
Każdy z powyższych przypadków zakłada, że zwierzak może mieć tylko jednego właściciela.
9. Liczebność związków (wiele do wiele)
Chcielibyśmy aby nasza baza danych pozwalała osobom mieć wiele zwierzaków, a zwierzakom mieć
wielu właścicieli. Do tego potrzebujemy związku wiele-do-wiele. Aby to osiągnąć musimy dodać do
naszego diagramu encję asocjacyjną.
W tym celu tworzymy dodatkową pustą encję „Posiada„ (niezawierającą żadnych argumentów).
Rys. 20. Związek o liczebności wiele-do-wiele między encjami „Osoba” i „Zwierzak” przy użyciu encji asocjacyjnej „Posiada”.
Teraz łączymy encje „Osoba” i „Zwierzak” z nowo utworzoną encją „Posiada” (tak jak na Rys. 20)
używając liczebności 0..*. Sprawi to, że w encji „Posiada” pojawią się 2 klucze obce.
Zmieńmy nazwy atrybutów na: „Wlasciciel” i „Zwierzak” i ustawmy oba atrybuty jako klucz główny.
Tworzymy związek taki jak na rysunku 22, gdzie nowo powstały klucz obcy (FK) „Zwierzak_Id” jest
referencją do ojca zwierzaka. Zmieńmy nazwę atrybutu na „Ojciec”.
Rys. 23. Związek rekurencyjny w encji „Zwierzak”.
Jak możemy zauważyć na powyższym obrazku (Rys. 23) Vertabelo ostrzega nas o pewnych
nieprawidłowościach w naszym związku. W okienku po lewej stronie widzimy żółty znaczek przy
związku „Zwierzak_Zwierzak”. W prawym dolnym rogu możemy przeczytać treść tego ostrzeżenia.
Vertabelo ostrzega nas, że referencja wynikająca ze związku rekurencyjnego nie może być
obowiązkowa, dlatego musimy odznaczyć opcję „mandatory” (w okienku po lewej). Po odznaczeniu
ostrzeżenie znika.
Przy atrybucie „Ojciec” pojawia nam się literka „N”, co oznacza, że ten atrybut może mieć wartość
Null, tzn. rekord w bazie danych może mieć ten atrybut niezadeklarowany. (Można to też ręcznie
włączyć zaznaczając checkbox przy N w edytorze atrybutów)
Stwórzmy teraz drugi związek rekurencyjny w analogiczny sposób i zmieńmy nazwę atrybutu klucza
obcego na „Matka”.
Na powyższym obrazku (Rys. 26) możemy zauważyć, że Vertabelo ostrzega nas o błędach w naszym
diagramie. W okienku po lewej stronie widzimy czerwony znaczek przy naszych związkach
„Zwierzak_Zwierzak”. W prawym dolnym rogu możemy przeczytać treść tych błędów.
Vertabelo mówi nam, że każdy związek musi mieć unikalną nazwę. Ze względu na to, że nie
zmienialiśmy docelowych nazw związków referencyjnych mamy teraz dwa zawiązki o tej samej
nazwie „Zwierzak_Zwierzak”.
Jak możemy zauważyć atrybuty w encjach „Weterynarz” i „Osoba” powtarzają się, dochodzi w tym
momencie do redundancji danych. Redundancja prowadzi do niespójności danych więc musimy tego
unikać.
13. Normalizacja
Znormalizujmy nasze encje „Weterynarz” i „Osoba”, tak aby dany fakt (np. Imie i Nazwisko)
wyrażalny był w naszej bazie danych tylko na jeden sposób.
Przeróbmy encję „Osoba” na encję abstrakcyjną której argumenty mogą dziedziczyć inne encje. Teraz
zróbmy dwie dodatkowe encje „Właściciel” i „Weterynarz” i połączmy je związkami o liczebności 0..1
z encją „Osoba”. Jako, że chcemy żeby związki były dziedziczeniem, w obu encjach ustawiamy klucz
obcy (pesel) jako klucz główny.
Rys. 30. Dziedziczenie gdzie encje „Wlasciciel” i „Weterynarz” dziedziczą po encji „Osoba”.
Powyżej przedstawione jest poprawne rozwiązanie dziedziczenia, które normalizuje nasz diagram.
14. Dokończenie diagramu
Dokończmy teraz nasz diagram, tak aby wyglądał w następujący sposób:
Zadanie 1.
Dokonaj interpretacji diagramu. Opisz słownie wymagania dla bazy danych jakie wynikają z
diagramu, który właśnie stworzyliśmy (Rysunek 31).