Neues Mapping Problem M:1:N

Ich steh gerade vor einem kleinen Mapping Problem mit Hibernate
Ich hab ein Objekt Position, das hat ein paar Attribute und kann verschiedene Extensions haben.
Jede Extension besteht aus einem Namen, ID und einem Wert, da es aber nur eine kleine Menge von Extensions gibt hab ich diese in eine extra Tabelle gemacht aber OHNE den Wert.
Der Wert ist in der M:N Tabelle untergebracht. Wie kann ich das mit Hibernate mappen, mir fällt da irgendwie nichts eins?

Tabelle Positions:
id
höhe

Tabelle Extensions:
id
name

Tabelle (M:N) positions_extensions:
positions_id
extensions_id
value

Du hast irgendwie immer seeeeeeeeeeeeehr merkwürdige Probleme. Ist dir das schon mal aufgefallen? Wenn eine Extension zu einem Wert gehört, warum dann zwei verschiedene Tabellen? Versteh ich nicht. Oder kann eine Extension mehrere Werte “haben”!?

Jep ich weiß, wenn man nur einfache Probleme hat wäre das ja auch zu langweilig :smiley:

Ne der Hintergrund ist der, diese Extension ist zb der Puls zu dieser Position, damit ich nicht eine Tabelle hab in der 1000x Puls steht hab ich die Tabelle aufgeteilt so das nur einmal Puls da steht und der Wert für diese Stelle steht in der anderen Tabelle.

Nachdem ich persönlich (rein fachlich) nicht so viel mit „Puls“, „Extension“ und „Position“ anfangen kann, würde ich mich (wie immer :D) über ein bisschen Code freuen. Java Klassen versteh ich dann doch leichter :wink: .

Ach das ist einfacher als du denkst :wink:

Position = GPS Position (Höhen/Breitengrat…)
Extension = Zusatzinfos für die Position
Puls = Herzfrequenz der bei der Position gemessen wurde.

meine Klasse war so geplant

class Extension{
private int id;
private String name;
private double value;
}

class Position{
...
private Vector<Extension> extensions;
}

nur sollte die ID und der Name halt aus der einen Tabelle geladen werden und der Wert aus ner anderen.

Achso, dachte es geht noch um dein Musik-Programm :wink: .

So wie das abgebildet ist, macht das aber keinen Sinn (oder ich checks einfach nicht :frowning: ). Wenn dein „wert“ nur einmal (laut jetztigem Modell) pro Extension vorkommt, warum sollte der dann ausgelagert werden. Macht doch nur Sinn, wenn eine Extension mehrere Werte haben kann.

Ne ist mein GPS Programm :wink:
Ne es ist so, eine Position um verschiedene Werte erweitert werden kann, so kann man halt sagen bei Position 1 hatte ich den Puls von 110 oder die Trittfrequenz war 123.
Aber da es nur eine kleine Menge von Erweiterungen gibt macht es keinen Sinn diese direkt mit den Werten in die Tabelle einzutragen (id,name,wert) weil im Regelfall gibt es zu jeder Position eine Erweiterung. Bei mir halt immer der Puls, dh du hast 700 Positionen pro Tripp und zu jeder Position eine Herzfrequenz Erweiterung, diese unterscheiden sich aber nur in dem Wert.
Daher 2 Tabellen einmal für die Erweiterung und einmal für den Wert, somit wiederholt sich die Erweiterung nicht mehr sinnlos (spart Speicher und Arbeit).
Da ich aber für eine Position mehrere Erweiterungen haben kann ist zwischen der Erweiterung und der Position eine M:N Beziehung. Diese M:N Tabelle hab ich jetzt aber mit dem Wert zusammen gelegt weil das sonst nur eine weitere leere Tabelle entstanden wäre.

Hm, sorry. Ich glaub ich kann dir da nicht helfen. Ich habs jetzt 5 mal gelesen und checks nicht :frowning:

ok dann nochmal anders
Eine Position kann X Erweiterungen haben, die einfachste Lösung wäre 1:M Beziehung zwischen Position und Extension
–> Pos (id,longitude,latitude,…), extension(id, name, value)

Jetzt hab ich aber sone Einträge
Pos
1, 10.5421, 51.31234,… <-> 1, ‘heartrate’, 60
<-> 2, ‘was anderes’, 123
2, 10.5221, 51.31534,… <-> 3, ‘heartrate’, 64
3, 10.4221, 51.34534,… <-> 4, ‘heartrate’, 100

Das gefällt mir nicht, weil der Name jetzt jedes mal drin steht. Dadurch braucht das alles viel mehr Speicher und auch die Abfragen sind langsamer weil man ja auf Strings abfragen muss.
Ich hab mal das Datenbankmodel als Bild angehängt

Jetzt kommts so langsam (glaub ich).

Als Name deiner Extension gibt es nur eine sehr begrenzte Anzahl an Namen, die öfters wieder auftreten.

Was spricht dagegen, der Position n Extensions zuweisen zu können, und jeder Extension genau einen Namen, der (wie es in deinem Model bereits angedeutet ist) in einer eigenen Tabelle mit ID ausgelagert wurde? Das sind doch zwei völlig eigenständige und voneinander unabhängige Verknüpfungen …

Ja die Idee hatte ich auch schon nur fällt mir da kein brauchbarer Name ein :smiley:
Aber so müsste ich das auch als extra Klasse in Java machen oder seh ich das falsch?

(Da ich gerade eine Frage fürn Job gestellt habt mach ich das hier gleich mal mit :D)

Seh ich als nicht so relevant an, wenn du schon Klassen hast, die „Extension“ heißen :stuck_out_tongue_winking_eye: .

jap

Mach ich ständig, ich bin praktisch nur im Job on :wink: . Aber bei der Telekom würd ich aufpassen :twisted: