Klassenentwurf

mrbela

Bekanntes Mitglied
Hey Leute!

Ich schreib gerade ein kleines Programm. Es gibt u.a. die Klasse Person und die Klasse Versicherung. Jede Person hat (!) genau eine (!) Versicherung haben.

Jetzt meine Frage:
Die Klasse Versicherung kriegt eine (z.B.)
Java:
java.util.List<Person>
mit allen Versicherungsnehmern und die Klasse Person ein Variable
Java:
Versicherung versicherung
oder?

Ich frage deshalb, da in der oben beschriebenen Konstellation ja eine -Datenbank techisch- n:1 ("Jede Versicherung hat n Personen, aber jede Person hat nur eine Versicherung") habe und wenn man diese als Tabellen abbilden würde, hätte nur jede Person ein Versicherungsattribut, die Versicherung aber keine Liste o.Ä.

Ich bin mir auch bewusst, dass es durchaus eine Designentscheidung des Programmierers ist, wie jetzt genau solche Relationships zw. Java-Klassen realisiert werden. Nur möchte ich mich darüber erkundigen, ob es genaue Regeln gibt, wenn man bspw. aus einem Datenbankschema ein Java-System bauen möchte...

Vielen Dank für Eure Hilfe!
 

Timothy Truckle

Top Contributor
Nur möchte ich mich darüber erkundigen, ob es genaue Regeln gibt, wenn man bspw. aus einem Datenbankschema ein Java-System bauen möchte...

Vielen Dank für Eure Hilfe!
Das Passt schon.
Die Frage ist nur, on die Person wirklich eine Referenz auf die Versicherung benötigt. Das hängt davon ab, ob man später öfter über die Versicherung auf die Person kommen will oder umgekehrt.

bye
TT
 

Sergeant_Pepper

Bekanntes Mitglied
Hallo,

du hast nach genauen Regeln gefragt ... dann würde ich erst mal antworten, dass es sehr schlecht wäre, wenn jede Person nur eine Versicherung haben kann.

Das vorausgesetzt, existiert zwischen "Versicherung" und "Person" eine m:n Beziehung. In einer relationalen Datenbank lässt sich das mit einer Verknüpfungstabelle ("Person-Versicherung") umsetzen. Diese hat mind. 2 Spalten:
"Person-ID" und "Versicherung-ID" (= Zuordnung zwischen Person und Versicherung).

Zwischen der Tabelle "Person" und "Person-Versicherung" existiert eine 1:n-Beziehung, ebenso zwischen "Versicherung" und "Person-Versicherung".

Im Umfeld Java und Datenbank ist Hibernate wohl ein gutes Stichwort.
 

KSG9|sebastian

Top Contributor
Du musst beide Richtungen betrachten:

1 Person hat 1 Versicherung
1 Versicherung hat 1 Personen

=> Person -> Versicherung 1:1

1 Person hat N Versicherung
1 Versicherung hat 1 Personen

=> Person -> Versicherung 1:N

1 Person hat 1 Versicherung
1 Versicherung hat N Personen

=> Person -> Versicherung N:1

1 Person hat N Versicherung
1 Versicherung hat M Personen

=> Person -> Versicherung M:N
 

freez

Top Contributor
Es gibt u.a. die Klasse Person und die Klasse Versicherung. Jede Person hat (!) genau eine (!) Versicherung haben.

Verstehe ich das richtig, dass dies deine bereits bestehende Anforderung an das Datenmodell ist? Wenn ja, dann musst du dir tatsächlich nur Gedanken drüber machen, von was auf was du zugreifen möchtest. Ich ignoriere mal gezielt die Posts meiner Vorredner, da deine Anforderungen nicht zwangsläufig mit der Realität zu tun haben müssen (Realität: n:m; Dein Programm: 1:n, wobei, wenn man von einer konkreten Versicherung, z.B. Krankenversicherung ausgeht, dann wäre das dann schon die Realität :) ).
  • Willst du alle Personen zu einer Versicherung, dann brauchst du eine Liste dieser Personen in der Versicherung
  • Willst du die Versicherung zu einer Person, musst du diese Versicherung in der Person ablegen
  • Möchtest du beides, musst du beides machen. Der Aufwand ist zwar höher die Objekte jeweils zu befüllen, aber das wäre schon der richtige Weg

Alle Varianten sind eine Abbildung von 1:n.

Ich frage deshalb, da in der oben beschriebenen Konstellation ja eine -Datenbank techisch- n:1 ("Jede Versicherung hat n Personen, aber jede Person hat nur eine Versicherung") habe und wenn man diese als Tabellen abbilden würde, hätte nur jede Person ein Versicherungsattribut, die Versicherung aber keine Liste o.Ä.

Das ist soweit auch vollkommen richtig, aber wie du dein Klassenmodell erstellst, hängt dann davon ab, was für eine Abfrage du machst. Du könntest:
  • Alle Personen mit Ihrer Versicherung abfragen
  • Oder eine / mehrere Versicherungen mit den dazugehörigen Personen

Je nachdem, musst du deine Klassen anders erstellen (siehe die 3 Punkte weiter oben).
 
Zuletzt bearbeitet:

Neue Themen


Oben