Przejście do drugiej części wykładu


Model danych obiektowo-relacyjny

W obiektowej bazie danych obiekty są instancjami typów obiektowych (klas) z metodami i z dziedziczeniem. Obiekty są gromadzone w tabelach obiektowych.

Tabela obiektowa - tabela, której elementami są obiekty ustalonego typu obiektowego (klasy). Przejście od tabeli relacyjnej do obiektowej odbywa się zgodnie z zasadą:

wiersz -> obiekt

W wyniku transformacji wiersz tabeli relacyjnej uzyskuje metody i tożsamość obiektową i staje się obiektem.

Wartością atrybutu może być wartość nie-atomowa (złożona) jak np. lista wartości, zbiór wartości, rekord, referencja do innego obiektu.
 

Model obiektowo-relacyjny w MS Visio - na przykładzie

W aktualnie używanej wersji MS Access nie ma opcji obiektowej. Opcja obiektowa występuje na przykład w systemie Oracle, o którym będzie mowa na wykładzie przedmiotu „Systemy baz danych”.

Podaj definicję w modelu obiektowo-relacyjnym kolekcji „zbiór kontaktów”. Pojedynczy kontakt powinien być rekordem zawierającym rodzaj i wartość np. e-mail prywatny oraz jan@mailserver.pl. Podaj definicję w modelu obiektowo-relacyjnym osoby z atrybutem opisującym jej kontakty.

 

Modelowanie zbiorów wartości

Kolekcja jest modelem zbioru wartości. Oprócz przynależności elementu do zbioru rozważa się dodatkowe właściwości: ustawienie elementów zbioru w ciąg, wielokrotne wystąpienia tego samego elementu zbioru. Oto rodzaje kolekcji:

Przykłady kolekcji osób: Grupa, Kolejka, Zapisy

 

W modelu obiektowo-relacyjnym przy pomocy kolekcji można w prosty sposób modelować pewne zjawiska, z którymi spotkaliśmy się już uprzednio jak: atrybuty typów nieatomowych oraz atrybuty, których wartości są zmienne w czasie (zobacz zadanie 8). Można również modelować związki zmienne w czasie, ale pod warunkiem zastosowania typów referencyjnych i więzów spójności ograniczających zakres referencji. Sposoby te zostaną omówione na wykładzie „Systemy baz danych” przy przedstawianiu obiektowo-relacyjnych baz danych.

Kolekcje można wymodelować w modelu relacyjnym w następujący sposób:

1. Grupa

 

W ramach pojedynczej grupy osoby nie są uporządkowane i nie powtarzają się (Numer i Idgrupy tworzą klucz główny).

2. Kolejka

W ramach kolejki osoby są uporządkowane (przez wartość atrybutu Pozycja). W jednej kolejce ta sama osoba może wystąpić wielokrotnie. Gdybyśmy chcieli zapewnić, że w kolejce każda osoba może się pojawić co najwyżej jeden raz, należałoby określić jednoznaczny indeks na parze atrybutów: Idkolejki i Numer.

3. Zapisy (wielozbiór)

W ramach pojedynczego zestawu zapisów (wielozbioru) jedna osoba może mieć więcej niż jedno wystąpienie. Uzyskujemy to przez wprowadzenie atrybutu Wystąpienie do klucza głównego encji Wpis. Kolejność wpisów jest nieistotna.

W zastosowaniach, w encji Wpis znalazłaby się prawdopodobnie dodatkowa informacja reprezentująca treść wpisu. Gdybyśmy nie potrzebowali takiej informacji moglibyśmy model zapisów (wielozbioru) uprościć przesuwając atrybut Wystąpienie do części niekluczowej encji Wpis - interpretując go jako liczbę wystąpień osoby identyfikowanej przez wartość atrybutu Numer.
 


ODL - język modelowania obiektowo-relacyjnego (Object Definition Language)
 

Składnia języka ODL jest wzorowana na składni języka C++. Podstawowym pojęciem jest obiekt. Zakłada się, że każdy obiekt posiada jednoznaczny identyfikator (OID), który odróżnia go od innych obiektów. Obiekty o podobnych cechach są grupowane w klasy modelowane przez interfejsy.

Specyfikując schemat klasy obiektów w języku ODL opisujemy trzy rodzaje właściwości obiektów:

  1. atrybuty - przyjmują wartości typów pierwotnych takich jak całkowity lub tekstowy albo typów złożonych powstających z pierwotnych;
  2. związki - referencje do obiektów pewnej klasy, albo kolekcje (zbiory) takich referencji;
  3. metody - funkcje operujące na obiektach danej klasy.

Przykład deklaracji klasy obiektów w ODL

interface Film{
    attribute string tytuł;
    attribute integer rok;
    attribute integer długość;
    attribute enum Taśma {kolor, czarno-biała} typTaśmy;
}
 

Atrybut typTaśmy jest wartością typu wyliczeniowego Taśma o dwóch wartościach {kolor, czarno-biała}. Obiekty klasy Film to krotki (czyli układy wartości) np. ("Przeminęło z Wiatrem", 1939, 231, kolor).
 

Przykład określenia klasy z atrybutem typu złożonego

interface Gwiazda{
                attribute string nazwisko;
                attribute Struct Adr {string ulica, string miasto} adres;
                };

Atrybut adres jest rekordem tj. wartością typu złożonego Struct o nazwie Adr. Składa się z dwóch pól: ulica oraz miasto. Oba pola są typu tekstowego. Rekord w języku ODL definiuje się poprzez podanie słowa kluczowego Struct oraz listy nazw pól i ich typów ujętej w nawiasy klamrowe.
 

Specyfikacja związku między obiektami klas

interface Film{
    attribute string tytuł;
    attribute integer rok;
    attribute integer długość;
    attribute enum Taśma {kolor, czarno-biała} typTaśmy;
    relationship Set<Gwiazda> obsada;
   };

W każdym obiekcie klasy Film występuje atrybut obsada, którego wartością jest zbiór referencji do obiektów klasy Gwiazda (na podstawie obiektu klasy Film można uzyskać listę gwiazd występujących w tym filmie) - wskazuje na to słowo kluczowe Set, które poprzedza napis <Gwiazda>.

W języku ODL typ, który jest zbiorem elementów typu T, definiuje się poprzez podanie słowa kluczowego Set oraz nazwy typu T w nawiasach kątowych.

Oprócz zbioru Set<T>, w ODL mamy do dyspozycji także inne rodzaje kolekcji:

  1. wielozbiór Bag<T>,
  2. listę List<T>,
  3. wektor (tablicę) Array<T,n> długości n.

Specyfikacja związku odwrotnego

Obok informacji kto występuje w danym filmie, równie ważne jest to w jakich filmach występuje dana gwiazda filmowa - co można uzyskać zamieszczając w definicji klasy Gwiazda:

    relationship Set<Film> wystepujeW;

W ten sposób nie można jednak opisać istotnego związku między filmami i gwiazdami:

jeśli gwiazda S należy do obsady filmu M, to film M należy do zbioru filmów, w których występuje gwiazda S

Ten rodzaj związku między dwiema klasami możemy określić w ODL przez dodanie do deklaracji związku słowa kluczowego inverse etykietowanego nazwą drugiego związku - razem z nazwą klasy, gdzie ten związek jest zdefiniowany.

interface Gwiazda{
       attribute string nazwisko;
       attribute Struct Adr {string ulica, string miasto} adres;
       relationship Set<Film> wystepujeW inverse Film::obsada
                };


Liczebność związku

Związek między klasami Film i Gwiazda jest wieloznaczny. Odpowiada to użyciu w definicji obu klas słowa kluczowego Set. Gdy Set będzie użyte tylko raz - mamy do czynienia ze związkiem jednoznacznym. Gdy ani razu - ze związkiem jedno-jednoznacznym.
 

Przykład definicji związku jednoznacznego

Załóżmy, że w każdym filmie wyróżniamy jednego aktora lub aktorkę jako supergwiazdę tego filmu. Jeden aktor lub aktorka mogą być supergwiazdami w wielu filmach. Jest to przykład związku jednoznacznego między klasami Film i Gwiazda.

interface Film{
    attribute string tytuł;
    attribute integer rok;
    attribute integer długość;
    attribute enum Taśma {kolor, czarno-biała} TypTaśmy;
    relationship Set<Gwiazda> obsada inverse Gwiazda::wystepujeW;
    relationship Gwiazda supergwiazda inverse Gwiazda::wybitne;
};

interface Gwiazda{
    attribute string nazwisko;
    attribute Struct Adr {string ulica, string miasto} adres;
    relationship Set<Film> wystepujeW inverse Film::obsada;
    relationship Set<Film> wybitne inverse Film::supergwiazda;
 };

Podaj definicję w ODL klas Pracownik i Departament oraz związku jednoznacznego między nimi: "Pracownik pracuje w dokadnie jednym departamencie".


Specyfikacja metody

Wśród właściwości klasy może wystąpić specyfikacja metody dla obiektów tej klasy. Na przykład, metoda obliczająca wiek pracownika w oparciu o atrybuty określone w interfejsie Pracownik.

interface Pracownik{
   attribute string nazwisko;
   attribute TypPłci Enum{mężczyzna, kobieta} Płeć;
   attribute Date dataUrodzenia;
   short Wiek();
   };


Specyfikacja dziedziczenia

Klasa może dziedziczyć wszystkie właściwości innej klasy. Na przykład klasa Profesor dziedziczy właściwości klasy Pracownik. Inaczej mówiąc, każdy obiekt określony przez interfejs Profesor oprócz swoich własnych atrybutów posiada wszystkie właściwości określone w interfejsie Pracownik:

interface Profesor : Pracownik{
    attribute string StopieńNaukowy;
    };

Dziedzina modelowania obiektowego jest tematem innego wykładu „Projektowanie systemów informacyjnych” i tam zostanie dogłębnie przedstawiona.
 

Semistrukturalny model danych

Semistrukturalny model danych ma specjalne znaczenie w aplikacjach baz danych.

Semistrukturalny model danych

Dokument jest zbiorem węzłów. Każdy węzeł jest albo liściem albo węzłem wewnętrznym. W liściach są zapisane dane określonego typu (np. liczby, napisy). Z każdego węzła wewnętrznego wychodzi jedna lub więcej krawędzi. Każda krawędź ma przyporządkowaną etykietę określającą związek między węzłami, które łączy. Jeden węzeł wewnętrzny jest wyróżniony jako korzeń. Nie wchodzą do niego żadne krawędzie. Reprezentuje on cały dokument. Do każdego węzła musi istnieć ścieżka od korzenia. Graf nie musi być drzewem.

 

Węzły reprezentują obiekty. Etykiety na krawędziach pełnią dwojaką rolę. Załóżmy, że istnieje krawędź e łącząca węzeł N z M:

Te same dane można przedstawić w postaci tekstowej jako tzw. dokument XML. Etykiety krawędzi pełnią tutaj rolę znaczników. Między znacznikiem otwierającym i zamykającym znajduje się tekstowa reprezentacja podgrafu, do którego kieruje dana krawędź.

<LISTA>
<PUBLIKACJA>
<AUTOR>
<IMIĘ>Lech</IMIĘ >
<NAZWISKO>Banachowski</NAZWISKO>
</AUTOR>
<TYTUŁ>Bazy danych Tworzenie aplikacji</TYTUŁ>
<ROK>1998</ROK>
</PUBLIKACJA>
<PUBLIKACJA>
<AUTOR>
<IMIĘ>Michał</IMIĘ>
<NAZWISKO>Lentner</NAZWISKO>
</AUTOR>
<TYTUŁ>Oracle9i</TYTUŁ>
<FORMAT>Twarda okładka</FORMAT>
</PUBLIKACJA>
</LISTA>

Struktura znaczników definiuje wewnętrzną strukturę dokumentu XML.

Modelowanie powiązań między obiektami w ramach jednego dokumentu XML

Model danych XML, tak jak inne modele danych, umożliwia powiązania między obiektami. Na przykład: jedna publikacja ma wielu autorów; jeden autor jest autorem wielu publikacji. Typ danych ID pozwala wprowadzić identyfikatory dla obiektów. Typy danych IDREF i IDREFS pozwalają korzystać ze wskaźników do obiektów. IDREF oznacza pojedynczy wskaźnik; IDREFS oznacza listę wskaźników. Te cechy pozwalają definiować semistrukturalne dane w postaci dowolnego grafu nie tylko drzewa.

Przykład: publikacje i autorzy

<LISTA>
  <AUTOR Id_autora="LB" Lista_pub="BD1,BD2,BD3">
    <IMIĘ>Lech</IMIĘ >
    <NAZWISKO>Banachowski</NAZWISKO></AUTOR>
  <AUTOR Id_autora="KS" Lista_pub="BD1,BD2,SO">
    <IMIĘ>Krzysztof</IMIĘ >
    <NAZWISKO> Stencel</NAZWISKO>
  </AUTOR>
  <PUBLIKACJA Id_publikacji="BD1" Lista_autor="LB, KS">
    <TYTUŁ>Bazy danych. Projektowanie aplikacji baz danych</TYTUŁ>
    <ROK>2001</ROK>
  </PUBLIKACJA>
  <PUBLIKACJA Id_publikacji="BD2" Lista_autor="LB,KS,AC,EM,KM">
    <TYTUŁ>Bazy danych. Wykłady i ćwiczenia</TYTUŁ>
    <FORMAT>Twardy</FORMAT>
  </PUBLIKACJA>
........
</LISTA>

Zauważmy, że opisane powiązania między węzłami są realizowane poprzez atrybuty elementów (węzłów).

Wartością atrybutu ID musi być nazwa. Wszystkie wartości ID w dokumencie muszą być różne. Wartości ID jednoznacznie określają poszczególne elementy w dokumencie. Elementy mogą mieć tylko jeden atrybut typu ID.

Wartością atrybutu IDREF musi być nazwa występująca jako wartość atrybutu ID.

Wartością atrybutu IDREFS musi być lista nazw występujących jako wartości atrybutów ID.


Podsumowanie

W wykładzie czwartym kontynuowaliśmy naukę modelowania danych z myślą o tworzeniu schematów baz danych. Przedstawione zostało kilka tematów:

  1. dwie alternatywne notacje modelowania danych - IDEF1X oraz Chena,
  2. rozszerzenia związane z konstrukcjami: perspektywy i hierarchii encji,
  3. wzorce modelowania dotyczące danych hierarchicznych oraz zmienności danych w czasie,
  4. cechy obiektowe w modelowaniu danych
  5. semistrukturalne modelowanie danych  - za pomocą grafów i za pomocą dokumentów języka XML.

Słownik

notacja Chena - notacja dla diagramów związków encji, w której encja jest rysowana jako prostokąt, atrybut jako kółko, związek jako romb. Umożliwia graficzną reprezentację diagramów ze związkami wieloznacznymi i związkami wielo-argumentowymi.

hierarchia encji - ustawienie zbioru encji w hierarchię; w hierarchii encja podrzędna (podencja) stanowi rozszerzenie właściwości encji nadrzędnej (nadencji) – poprzez związek jednojednoznaczny.

związek kategorii - związek encji nadrzędnej ze zbiorem encji podrzędnych rozszerzających jej właściwości. Kategoria może być pełna, gdy zbiór instancji encji podrzędnych jest równy zbiorowi instancji nadrzędnej; w przeciwnym razie niepełna.

dane hierarchiczne - dane powiązane ze sobą hierarchicznymi powiązaniami takimi jak struktura organizacyjna firmy.

czas - aspekt danych uwzględniający ich zmienność w czasie. Dotyczy zmienności wartości atrybutów, instancji encji i instancji związków.

model obiektowo-relacyjny - model danych, w którym oprócz "płaskiej" struktury danych relacyjnego modelu danych – tabeli, używa się złożonych struktur danych definiowanych przez typy obiektowe bądź klasy jak w obiektowych jezykach programowania.

tabela obiektowa - tabela, której elementami są obiekty ustalonego typu obiektowego (klasy). Przejście od tabeli relacyjnej do obiektowej odbywa się zgodnie z zasadą: wiersz -> obiekt  tzn. wiersz tabeli relacyjnej uzyskuje metody i tożsamość obiektową i staje się obiektem.

typ obiektowy - definicja klasy obiektów, wzorzec dla obiektów obejmujący takie konstrukcje jak atrybuty typów złożonych i metody.

kolekcja - model zbioru wartości. Oprócz przynależności elementu do zbioru rozważa się dodatkowe właściwości: ustawienie elementów zbioru w ciąg, wielokrotne wystąpienia tego samego elementu zbioru.

ODL - język modelowania obiektowo-relacyjnego.

związek odwrotny - związek reprezentujący odwrotną relację na zbiorach obiektów do danego związku.

semistrukturalny model danych - ogólny model danych, w którym struktura danych jest określana za pomocą grafu węzłów i krawędzi.

dokument XML - dokument tekstowy wzbogacony o znaczniki objaśniające znaczenie poszczególnych danych w nim zawartych. Stanowi reprezentację tekstową dokumentu w semistrukturalnym modelu danych. Używany do integracji danych pochodzących z różnych baz danych, oddzielania struktury dokumentu od jego prezentacji oraz do przesyłania danych w sieci Internet.


Zadania

(Niektóre zadania pojawiły się już uprzednio w tekście wykładu.)

1. Podaj model w notacji Chena dla danych dotyczących zwierząt w ZOO, ich opiekunów i pokarmów. Model powinien obejmować związek: zwierzę zjada posiłek przygotowany przez opiekuna.

2. Zbuduj hierachię znanych Ci rodzajów obiektów latających. Jakie właściwości są dla nich wspólne, jakimi się różnią?

3. Zbiór komponentów (części) samochodu tworzy hierarchię opartą na związku: "jedna część samochodu jest składnikiem drugiej części". Podaj diagram związków encji modelujący tę hierarchię.

4. Podaj model dla danych zmiennych w czasie dotyczący związku domów i z ich właścicielami. Uwzględnij możliwość, że dom ulegnie zniszczeniu a właściciel umrze.

5. Zaproponuj model danych dla problemu zmienności encji w czasie – z zachowaniem związku między instancją encji i jej kolejną wersją w czasie.

6. Podaj definicję w modelu obiektowo-relacyjnym kolekcji "zbiór kontaktów". Pojedynczy kontakt powinien być rekordem zawierającym rodzaj i wartość np. e-mail prywatny oraz jan@mailserver.pl. Podaj definicję w modelu obiektowo-relacyjnym osoby z atrybutem opisującym jej kontakty.

7. W modelu relacyjnym zbuduj diagram związków encji modelujący kontakty i osoby z zadania 5.

8. Zbuduj diagram obiektowo-relacyjny zastępując związki przez kolekcje w następującym diagramie:

 

Jaki rodzaj kolekcji należy użyć?

9. Podaj definicję w ODL klas Pracownik i Projekt oraz związku wieloznacznego między nimi: "Pracownik pracuje w jednym lub więcej projektach. W jednym projekcie pracuje jeden lub więcej pracowników.



Strona przygotowana przez Lecha Banachowskiego - 12/13/03 .