Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

Tworzenie diagramów związków encji przy użyciu Vertabelo

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.

Rys. 1. Przykładowy diagram encji

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.

Null - brak wartości.

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).

1. Tworzenie nowego diagramu


Po zalogowaniu się na stronie vertabelo.com zobaczymy listę swoich diagramów.

Rys. 2. Tworzenie nowego diagramu

Aby stworzyć nowy diagram klikamy ikonkę w lewym górnym rogu.

Rys. 3. Wybór rodzaju diagramu

Zostaniemy zapytani o rodzaj diagramu, który chcemy


stworzyć: wybieramy „Physical data model”.
Wprowadzamy nazwę dla naszego diagramu np.
WSI_przyklad_1 (bez polskich znaków) i jako
docelową bazę danych wybieramy „Oracle Database Rys. 4. Inicjalizacja diagramu
11g/12c”. W sekcji Content wybieramy „Empty”.

Po kliknięciu START MODELING wyświetli nam się pusty arkusz.


2. Tworzenie encji
Stwórzmy teraz naszą pierwszą encję, niech będzie to „Osoba”. Stanie się ona później tabelą w naszej
bazie danych.

Rys. 5. Tworzenie encji

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).

Rys. 6. Edytowanie encji

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.

Rys. 7. Edytowanie atrybutu

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.

Rys. 8. Wybieranie typu atrybutu

Jako, że chcemy aby nasz atrybut „Imie” był Stringiem: wybieramy opcję „varchar2(%)” i podajemy
jego długość w polu Length, np. 20.

Ostatecznie nasz atrybut powinien wyglądać następująco:

Rys. 9. Atrybut Imie


4. Tworzenie klucza głównego
Stwórzmy teraz klucz główny (ang. Primary Key) dla naszej encji, czyli niepowtarzalną wartość która
jednoznacznie definiuje rekord w naszej bazie danych. (Każda encja musi posiadać klucz główny)

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).

5. Kontynuacja tworzenia encji


Do encji „Osoba” dodajmy jeszcze atrybut „Nazwisko” i analogicznie stwórzmy nową encję
„Zwierzak”.

Rys. 12. Encje „Osoba” i „Zwierzak”

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.

Rys. 13. Tworzenie związku między encjami

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”.

Zmieńmy nazwę naszego klucza obcego na „Wlasciciel” (bez polskich znaków).


8. Liczebność związków (jeden do jednego/ jeden do wiele)
Docelowo Vertabelo tworzy związek o liczebności 0..*, inne dostępne związki to 0..1, 1..1, 1..*.

Związek jednoznaczny jeden do wiele 0..*

Rys. 16. Związek 0..* (jeden do wiele)

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

Rys. 17. Związek 0..1 (jeden do jednego)

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).

Związek jednoznaczny jeden do jednego 1..1

Rys. 18. Związek 1..1 (jeden do jednego)

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).

Związek jednoznaczny jeden do wiele 1..*

Rys. 19. Związek 1..* (jeden do wiele)

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.

10. Encja asocjacyjna


W naszej encji asocjacyjnej „Posiada„ musimy stworzyć dwuargumentowy klucz główny, gdyż
jednoznacznie możemy zidentyfikować rekord tylko jeśli znamy zarówno pesel właściciela oraz id
zwierzaka.

Rys. 21. Encja asocjacyjna „Posiada” z dwu atrybutowym kluczem głównym.

Zmieńmy nazwy atrybutów na: „Wlasciciel” i „Zwierzak” i ustawmy oba atrybuty jako klucz główny.

11. Związek rekurencyjny


Załóżmy teraz, że chcielibyśmy przechowywać informacje o ojcu i matce zwierzaka. Możemy w tym celu
użyć związku rekurencyjnego, tzn. poprowadzonego od danej encji do niej samej.

Rys. 22. Związek rekurencyjny w encji „Zwierzak”.

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.

Rys. 24. Ostrzeżenie w związku „Zwierzak_Zwierzak”.

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.

Rys. 25. Atrybut nullable „Ojciec”

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”.

Rys. 26. Diagram po dodaniu drugiego związku rekurencyjnego do encji „Zwierzak”.

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.

Rys. 27. Treść błędu w naszym diagramie.

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”.

Rys. 28. Pole nazwy związku.

Zmieńmy nazwy związków rekurencyjnych ze „Zwierzak_Zwierzak” na „Zwierzak_Ojciec” i


„Zwierzak_Matka”. Po tej zmianie ostrzeżenia o błędach znikają.
12. Redundancja danych
Załóżmy teraz, że chcielibyśmy do naszej bazy danych dodać weterynarza, który jest odpowiedzialny
za leczenie danego zwierzaka. W tym celu możemy utworzyć encję weterynarz

Rys. 29. Redundancja danych na przykładzie encji „Weterynarz” i „Osoba”.

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.

Po wykonaniu tych operacji nasze encje powinny wyglądać w następujący sposób:

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:

Rys. 31. Finalny stan diagramu.

Diagram gotowy, teraz możemy przekazać go programistom, którzy zaimplementują na jego


podstawie bazę danych.

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).

You might also like