# Redundanz im TableModel



## hdi (2. Apr 2009)

Hallo,

vorab: Ich habe noch keine Erfahrung im Programmieren mit Java und Datenbanken.
Nun möchte ich mir eine Music Library basteln, das ist eine GUI die Infos aus einer Datenbank (Access oder mySQL) darstellt.
Man soll dort dann suchen können, sortieren, aber auch Daten ändern.

Jetzt bin ich gerade dabei mir zu überlegen, wie mein TableModel aussieht. Ich wollte jetzt erst Klassen erstellen á la Album,Song,Artist usw. Allerdings bekomme ich so enorme Redundanz und Fehleranfälligkeit rein. Bsp es wird ein neuer Track in ein Album eingetragen. Nun hat die Klasse Album eine Liste von Tracks, aber ein Track hat auch ein Album. Diese Redundanz trifft noch auf einige andere Informationen zu.

Wie macht man denn sowas eig? In einer Datenbank hat man ja zB einen Sekundärschlüssel auf ein Album (Bei der Tabelle Song).
Aber wie bastel ich mir jetzt daraus sinnige Java-Klassen :bahnhof:

Man muss dazu sagen, dass ich auch in Programmierung mit JTables/TableModel nicht wirklich Erfahrungen habe. Das Sun-Tutorial zu JTables werd ich mir noch genauer anschauen, aber dort wird nicht erklärt wie man mit Datenbanken am besten umgeht.

Danke


----------



## maki (2. Apr 2009)

Unabhängig vom TableModel:


> Ich wollte jetzt erst Klassen erstellen á la Album,Song,Artist usw. Allerdings bekomme ich so enorme Redundanz und Fehleranfälligkeit rein. Bsp es wird ein neuer Track in ein Album eingetragen. Nun hat die Klasse Album eine Liste von Tracks, aber ein Track hat auch ein Album. Diese Redundanz trifft noch auf einige andere Informationen zu.


Hört sich nach bidirektionalen Assoziationen an, diese sollten sowieso vermieden werden.

Ansonsten: Warum TableModel?
Das ist doch eher etwas für die View, oder nicht? 

Für erste Versuche mit JDBC ist es imho fast besser auf die GUI zu verzichten und sich lieber auf die Busniess Logik zu konzentrieren, kannst das verhalten mit Unittests absichern.



> Wie macht man denn sowas eig? In einer Datenbank hat man ja zB einen Sekundärschlüssel auf ein Album (Bei der Tabelle Song).
> Aber wie bastel ich mir jetzt daraus sinnige Java-Klassen


ER und OO sind nicht wirklich kompatibel: Object-relational impedance mismatch - Wikipedia, the free encyclopedia
Brauchst so etwas wie ein Mapping von der DB zu deinen Objekten.
Kannst du selbst machen (für Anfänger besser) oder gleich auf ein ORM setzen.

Ist die DB Struktur denn vorgegeben?


----------



## hdi (2. Apr 2009)

> Ansonsten: Warum TableModel?
> Das ist doch eher etwas für die View, oder nicht?



Naja bedingt. Klar ich brauch kein TableModel wenn ich keine GUI habe, aber an sich
ist das TableModel nicht die View, sondern eben das Model. (Nur für eine View kompatibel aufbereitet)



> Brauchst so etwas wie ein Mapping von der DB zu deinen Objekten.


Und wie würde man sowas machen ohne bidirektionale Beziehungen?
Konkret dieses Bsp: Ein Album hat Songs, jeder Song hat ein Album. Wie mappt man sowas.



> Ist die DB Struktur denn vorgegeben?


Naja...das solln Programm für einen Freund werden. Er hat seine CDs und Platten in Access eingegeben.
Aber das is egal weil das Programm soll eh noch mehr bieten können usw.
Sprich was er bisher eingetragen hat, zieh ich mir aus ner Excel Datei einmal und schreib
es dann gleich in eine neue DB, die auf mein Programm angepasst ist.
Und dann kann er mit dieser neuen DB weiterarbeiten, ich würd nämlich lieber mySQL machen.


----------



## maki (2. Apr 2009)

> Naja bedingt. Klar ich brauch kein TableModel wenn ich keine GUI habe, aber an sich
> ist das TableModel nicht die View, sondern eben das Model. (Nur für eine View kompatibel aufbereitet)


Schon klar, aber eben ein Swing View spezifisches Model, oder habe ich da etwas falsch verstanden? (habe nie wirklich mit Swing gearbeitet)



> Und wie würde man sowas machen ohne bidirektionale Beziehungen?
> Konkret dieses Bsp: Ein Album hat Songs, jeder Song hat ein Album. Wie mappt man sowas.


Das macht man so wie man es braucht 
Beispiel: Was wird meist genutzt?
Das Album um an die Songs zu kommen, oder die Songs um an das Album zu kommen?
So entwirfst du dein Model.
Für den anderen, selteneren Fall bietest du eine Methode in deinen DAOs/Repositries an.

Von MySQL würde ich dir abraten, nimm lieber HSQLDB, H2, Derby etc. pp.
MySQL ist zu einer Zeit populär geworden als RI und Transaktionen nicht so wichtig waren, zB. in PHP Apps 
Denn die MySQL  Standard Tabellen (ISAM) unterstützen das nicht, ist zwar nicht schwer auf InnoDB umzustellen, aber MySQL ist sicherlich nicht das Gelbe vom Ei.


----------



## tfa (2. Apr 2009)

InnoDB ist IMHO mittlerweile Standard. Trotzdem ist eine Java-DB viel praktischer für so eine Software. Hauptsache aber man nimmt eine Datenbank, und nicht etwa Access


----------

