niedziela, 23 listopada 2008

Odwzorowanie dziedziczenia, asocjacji i kompozycji w bazie


Cel: Stworzenie efektywnego modelu obiektowego przy pomocy Hibernate: dziedziczenie, asocjacja, kompozycja. Wybór strategii odzwierciedlenia dziedziczenia w bazie danych.

Trochę inna strona Hibernate. Do tej pory praca z Hibernate wyglądała następująco: po prawidłowym skonfigurowaniu połączenia z bazą danych należało stworzyć model obiektowy baz danych, a następnie przy pomocy plików mapujących można było wygenerować schemat bazy danych. Jest to tak zwane "podejście z góry w dół".

W NetBeans 6.5 zostało dodane narzędzie, które umożliwia odwrotny scenariusz odwzorowywania, czyli na początku tworzony jest schemat bazy danych, a następnie przy pomocy narzędzi Hibernate zostają wygenerowane klasy Javy oraz pliki odwzorowań. Tak zwane "podejście z dołu do góry".

Jednak problemy odwzorowania relacyjno obiektowego nie znikają. Schemat obiektowy posiada wiele takich własności, których nie można bezpośrednio przełożyć na schemat relacyjny. Problem pojawia się w momencie gdy chcemy odzwierciedlić dziedziczenie, asocjacje czy kompozycję.

1. Dziedziczenie

Istnieją trzy różne podejścia stosowane do odwzorowania dziedziczenia:

1.1. Tabela na każdą klasę konkretną – dokładnie jedna tabela na każdą nieabstrakcyjną klasę, wszystkie własności klasy nadrzędnej są dopisywane do klas dziedziczącej.

WADA: Zapytanie dotyczące klasy bazowej musi zostać rozbite na wiele poleceń SELECT, często jest to mało wydajne.

Wygląda to tak:


1.2. Tabela na każdą hierarchie klas – czyli całą hierarchia klas odwzorowywana jest w jednej tabeli. Dodatkowo dodawana jest kolumna dyskryminatora typu.

WADA: Nie można nadać ograniczenia Not null dla kolumn które są właściwościami podklasy.

1.3. Tabela na każdą podklasę – czyli każda klasa jest reprezentowana jako jedna tabela w bazie i podklasy są w asocjacji z klasą nadrzędną.

WADA: Złożone zapytania.


Wszystkie te modele mają swoje wady i zalety tak więc należy stosować strategię odpowiednią do konkretnego schematu.


Tu omówiony został przykład:
Odwzorowanie dziedziczenia przykład
http://agatkiwoj.blogspot.com/2008/11/odwzrowanie-dziedziczenia-przykad.html

Brak komentarzy: