# Vererbung in einer Datenbank



## White_Dragonson (8. April 2005)

Hi ist es möglich in Datenbanken Vererbungen einzubeziehen, mit 1:1 Beziehungen sollte es klappen oder.

  Bsp: Tbl_Objekt (Basisklasse) hat folgende Attribute: ID, Titel, Preis

   Tbl_Buch (vererbte Klasse von Tbl_Objekt) hat folgende Attribute: ISBN, Seitenzahl
   Tbl_Vhs (vererbte Klasse von Tbl_Objekt) hat folgende Attribute: Videolänge, ..

  Ist es besser mit Vererbung zu arbeiten oder doch besser alles in eine Tabelle?

 MfG
 W_Ds


----------



## XChris (8. April 2005)

Wenn Du Objektorientierung in ein Relationales System bringen willst, hast Du noch andere Probleme. Versionierung, Lebenszyklus etc.
Man macht sowas oft mit DB Unabhängigen ID (GUID), Versionssnummer und dem konsequenten vermeiden von UPDATE.
Problematisch ist die Thematik aber allemal - denn man hat ja normal nur Relationen. Hierarchien z.B. lassen sich so ganz schlecht darstellen - gerade die hat man aber durch Vererbung oft.

Chris


----------



## White_Dragonson (8. April 2005)

Ja is wirklich problematisch, denk aber das es mit Hilfe einer 1:1 beziehung man eine Vererbungsähnliche Sache hinbekommen kann. Updaten würde ich erst die eine Tabelle (die simulierte Basisklasse), dann anhand der ID die zweite Tabelle Updaten.


----------



## XChris (8. April 2005)

Zum Update.

Ich hab mal gelernt, dass ein natürliches Objekt nicht "wirklich" nen Update hat. Wenn Du also nen Objekt hast, bei dem sich wiederrum andere Objekte drauf beziehen ... und das in einem zeitlichen Bezug steht - dann bloss kein Update.
Lieder ein Objekt in der Relationalen DB X mal mit jeweils ner neuen Version.

Hab mal nen Layer OO <-> R geschrieben .... da macht man sich intensiv Gedanken. Kann dazu nen Buch empfehlen

Software Architektur für die Praxis 

Chris


----------



## Thomas Darimont (9. April 2005)

Hallo!

Prinzipiell gibt es da IMHO 3 Möglichkeiten:

Table per conrete Class:
Jede (nicht abstrakte) Klasse bekommt ihre eigene Tabelle. Alle Attribute dieser Klasse werden in dieser Tabelle als Spalten Modelliert. Jedoch gibt es hier das Problem das keine Polymorphen Beziehungen abgebildet werden können.

Table per class-hierarchy:
Hierbei wird für jede Klassenhierarchie eine Tabelle erstellt. In dieser Tabelle werden dann alle (persistenten) Attribute aller Entitäten dieser Hierarchie auf die Tabellenspalten umgemapped. Dabei kann es natürlich vorkommen, dass eine gespeicherte Entität bestimmte Attribute einer speziellereren Entität dieser Hierarchie nicht hat. Diese Spalten wären dann etwa mit NULL gefüllt. Nun muss man natürlich auch für jeden Datensatz unterscheiden können welchen konkreten Typ der Hierarchie nun dort repräsentiert wird. Dies wird durch eine zusätzliche so genannte Diskriminatorspalte erreicht.

Table per Sub Class
Jede (nicht abstrakte) Unterklasse hat bekommt ihre eigene Tabelle. Die Assoziationen  und die Vererbungsbeziehung werden/wird über Foreign-Key Beziehungen abgebildet.

Das sind zumindest die Strategien die man häufig bei so genannten O/R Mappern (Object Relational Mapper) wie etwa Hibernate antrifft.

Gruß Tom


----------

