home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Einführung

Auch wenn es keine standardisierte Definition von Object-Relation-Mapping gibt, so versteht man doch im Allgemeinten unter O/R Mapping das Abbilden von Objekten auf relationale Datenbanktabellen. Dies beinhaltet

     

  • Zustand der Objekte (Werte und Typen der Attribute)
  • Assoziationen zwischen Klassen/Objekten
  • Vererbungsbeziehungen

Datentypen in Java und SQL92

Es gibt keine strenge Vorschrift, wie Datentypen in Java in Datentypen der Datenbank zu mappen sind. Im Fall der Boolschen Variablen existiert in vielen Datenbanken kein Pendant, da es von SQL 92 nicht vorgegeben ist.

Wichtige Relationen sind

     

  • java.lang.String <=> VARCHAR, CHAR
  • java.util.Timestamp <=> TIMESTAMP
  • java.util.Date <=> DATE
  • double <=> DOBULE, FLOAT
  • float <=> REAL
  • boolean <=> char(1), SMALLINT
  • int <=> INTEGER

Ein vollständigere Übersicht findet sich bei SUN.

Abbilden einer einzelnen Klasse

Eine einzelne Klasse bildet man meistens auf eine Tabelle ab. Dazu gilt es pro Attribut den Datentyp des Objektes auf einen SQL Datentyp zu "mappen" (TODO add link) und einen Primärschlüssel (primary key PK) zu definieren. Dies kann entweder ein Attribut der Klasse oder eine frei wählbare, nur einmal vorkommende Objekt-Id sein.

Die Namenskonvention, nach der Spalten, die den Primärschlüssel bilden, mit PK, und solche die einen Fremdschlüssel darstellen mit FK beginnen, ist optional.

 

Abbilden einer 1:1 Beziehung

Es gibt zwei Möglichkeiten, eine 1:1-Beziehung im Klassendiagramm auf Datenbankseite abzubilden. Entweder über eine Tabelle, welche die Attribute beider Klassen enthält, oder über zwei Tabellen, wobei eine Tabelle den Fremdschlüssel (foreign key FK) auf die andere hält.

 

Abbilden einer 1:n Beziehung

1:n Beziehungen werden in der Datenbank meist über zwei Tabellen realisiert.

Abbilden einer n:m Beziehung

Befinden sich zwei Klasse in einer n:m Beziehung, ist eine dritte Tabelle erforderlich. In unserem Beispiel haben wir die Klassen Pruefung und Student, wobei eine Pruefung mehrere teilnehmende Studenten hat und ein Student an mehreren Prüfungen teilnehmen kann.

Das gewählte Beispiel sagt aus, dass Student mit Matrikelnummer 100000 (Gerda) an zwei Prüfungen teilnimmt (denen mit den Nummern 00001 und 00002), während sich Student "Gerd" auf nur eine Prüfung konzentriert.

Abbilden der verschiedenen Assoziationstypen

Unabhängig von der Multiplizität (TODO richtiges Wort finden), können Beziehungen einfache Assoziationen, Kompositionen oder Aggregationen sein. Das Tabellenlayout kennt diese Unterscheidung nicht. Allerdings werden Kompositionen meist über ein Cascading Delete realisiert. TODO in SQL Kapitel Syntax hinzufügen.

Abbildung von Vererbungsbeziehungen

Auch Vererbungsbeziehungen zwischen Klasse lassen sich in der Datenbankwelt abbilden. Hier gibt es sogar drei verschiedene Möglichkeiten.

     

  1. Für jede der Klassen, also für vererbende und erbende Klasse, wird eine Tabelle erstellt. Die erbenden Klassen enthalten das zusätzliche Attribut und einen Fremdschlüssel auf die vererbende.
  2. Nur die erbenden Klassen werden als Datenbanktabellen realisiert. Dabei werden alle Attribute der vererbenden Klasse in den Tabellen der erbenden Klasse übernommen.
  3. Eine einzige Tabelle enthält alle Attribute der erbenden und vererbenden Klassen. Allerdings bleiben dann Felder in der Datenbank leer (was einer Normalform nicht widerspricht).

In unserem Beispiel - das übrigens keinen Bezug zur Realität hat - unterteilen sich die Lehrkräfte einer Hochschule in Professoren und Lehrbeauftragte. Während alle Lehrkräfte über eine Nummer und einen Namen verfügen, bleibt es den Professoren vorbehalten, bezahlt zu werden. Hingegen haben die Lehrbeauftragten noch eine Firma, in der sie arbeiten, und von der sie für die Vorlesung freigestellt werden.