|
Blog > Komentarze do wpisu
Mapowanie dziedziczenia w relacyjnych bazach danych
Obecnie najczęściej stosowanymi bazami danych są relacyjne bazy danych. Mimo wielu niewątpliwych zalet posiadają sporo ograniczeń. Jednym z nich jest problem mapowania obiektowo-relacyjnego, czyli odwzorowania danych opisanych za pomocą języka obiektowego do postaci tabel i relacji.
Jedną z podstawowych koncepcji OOP jest dziedziczenie. Na potrzeby tego wpisu zajmijmy się prostym przykładem (zapisane w notacji UML): ![]() Istnieją trzy podstawowe sposoby odwzorowania: Jedna tablica dla całej hierarchii Tworzymy jedną tablicę dla całej hierarchii obiektów zawierającą atrybuty wszystkich obiektów. Tablica taka będzie miała postać: Osoba OsobaID <<PK>> TypOsoby Nazwisko NrIndeksu Tytuł OsobaID jest kluczem podstawowym, TypOsoby określa czy dana Osoba jest Studentem czy Wykładowcą. Zalety i wady:
Tworzymy osobne tablice dla każdej z klas. Klasy podtypów posiadają jedynie te atrybuty, które różnią je od nadklasy. Dla naszego przykładu otrzymamy: Osoba OsobaID <<PK>> Nazwisko Student OsobaID <<PK>> <<FK>> NrIndeksu Wykładowca OsobaID <<PK>> <<FK>> Tytuł W tabelach Student i Wykładowca atrybut OsobaID jest zarazem kluczem podstawowym jak i kluczem obcym odnoszącym się do tabeli Osoba. Zalety i wady:
Tworzymy osobne tabele jedynie dla klas konkretnych, pomijając klasy abstrakcyjne. Tabele podklas zawierają zarówno atrybuty nadklasy jak i własne. Dla naszego przykładu otrzymamy tabele: Student StudentID <<PK>> Nazwisko NrIndeksu Wykładowca WykładowcaID <<PK>> Nazwisko Tytuł Zalety i wady:
Jak widać każde z powyżej zaprezentowanych rozwiązań ma swoje wady i zalety. Każde z nich sprawdzi się w innych sytuacjach, dla innych baz danych i aplikacji. Alternatywnym rozwiązaniem jest zastosowanie obiektowo-relacyjnej bazy danych, wspierającej dziedziczenie tabel. Przykładem takiej bazy może być PostgreSQL. Nie zawsze jednak możemy skorzystać z takiego rozwiązania. Literatura: 1. Object-Relational Mapping Basics & Strategies 2. Mapping objects to relational databases 3. Mapping Objects to Relational Databases: O/R Mapping in details niedziela, 25 listopada 2007, kosciak1
TrackBack
|
|