Spaltennamen "Mapping"

S2PID

Mitglied
Hallo,

ich hab gerade ein rießen Brett vorm Kopf und hoffe das Ihr mir helfen könnt. Folgendes Problem:

Ich hab eine Tabelle welche ein Produkt beschreibt, z.B:

ID | Name | Eigenschaft1 | Eigenschaft2 | Eigenschaft3 | Eigenschaft4 | Eigenschaft5
--------------------------------------------
1 | aaa | 3 | 6 | 5 | 123 | 312
2 | aab | 13 | 43 | 23 | 453 | 32
3 | aac | 23 | 345 | 67 | 23 | 12
......

Soweit ist alles fix und klar. Die Eigenschaften sind alles Zahlenwerte

Nun brauch ich eine Idee/Lösung für eine Bewertung des Produkts nach folgendem Schema. Es kann eine oder mehrere Eigenschaften des Produkts gewählt werden und eine Range in welcher sich die Eigenschaft bewegen kann. Es kann unterschiedliche Bewertungen geben. Irgendwann können die Bewertungen abgerufen werden und sollen liefern ob die Produkte gut (Eigenschaften liegen innerhalb der gewählten Werte) oder schlecht sind.

Meine erste Idee war folgende Tabelle:
BewertungID | Eigenschaft | Von | Bis
1 | Eigenschaft1 | 0 | 100
1 | Eigenschaft3 | -100 | 200
2 | Eigenschaft1 | 0 | 200
2 | Eigenschaft2 | -300| 200
2 | Eigenschaft3 | 100 | 300
2 | Eigenschaft4 | -400 | 400
3 | Eigenschaft2 | 0 | 100
3 | Eigenschaft3 | -100 | 200
usw....
Also ein "Mapping" anhand der Spaltennamen...

Nun bin ich aber nicht so ganz zufrieden mit der "Lösung", den was passiert wenn sich ein Spaltenname ändern soll, oder irgendwas an das ich noch nicht gedacht habe.

Für eine Best Practice Empfehlung wäre ich sehr Dankbar!

(Hintergrund: Oracle 11g, JPA)
 
S

SlaterB

Gast
in deinem Problem ist wenig informatik-haltiges vorhanden,
wenn du irgendwo die Information 'Erdbeeren' ablegen willst und woanders taucht mal 'Erdbeeren' auf, dann aber auch wieder 'Kirschen',
dann sieht man da eine Diskrepanz, mit welcher Bedeutung auch immer, aber was soll daran technisch zu lösen sein?

du kannst deine Bewertungstabelle sicherlich bisschen indirekt aufbohren,
statt in x Zeilen die Eigenschaft direkt hinzuschreiben kannst du auf eine andere Tabelle verweisen, dort einen Eintrag 'Eigenschaft', mit austauschbaren Namen, vielleicht sogar mehreren Sprachen, Versionen für verschiedene Zeitpunkte/ Systeme usw.,
so bist du grundsätzlich flexibler, kannst mit einmal Umschalten von 'Erdbeeren' auf 'Kirschen' gleich 20 Bewertungstabelle-Einträge aktualisieren, da sie alle auf einen Eigenschaft-Eintrag verweisen

geht es dir um solche Gedanken?
 

Momolin

Aktives Mitglied
Hallo,

bei Deiner Beschreibung, muss ich an Pivot-Tabellen denken. Manche Datenbanksystem haben die implementiert (MySQL nicht). Es geht aber auch mit selbst geschriebenen SQL, dessen Generierung sich dann programmieren lässt:
Hallo,

ich hab gerade ein rießen Brett vorm Kopf und hoffe das Ihr mir helfen könnt. Folgendes Problem:

Ich hab eine Tabelle welche ein Produkt beschreibt, z.B:

ID | Name | Eigenschaft1 | Eigenschaft2 | Eigenschaft3 | Eigenschaft4 | Eigenschaft5
--------------------------------------------
1 | aaa | 3 | 6 | 5 | 123 | 312
2 | aab | 13 | 43 | 23 | 453 | 32
3 | aac | 23 | 345 | 67 | 23 | 12
......

Soweit ist alles fix und klar. Die Eigenschaften sind alles Zahlenwerte

Nun brauch ich eine Idee/Lösung für eine Bewertung des Produkts nach folgendem Schema. Es kann eine oder mehrere Eigenschaften des Produkts gewählt werden und eine Range in welcher sich die Eigenschaft bewegen kann. Es kann unterschiedliche Bewertungen geben. Irgendwann können die Bewertungen abgerufen werden und sollen liefern ob die Produkte gut (Eigenschaften liegen innerhalb der gewählten Werte) oder schlecht sind.

Meine erste Idee war folgende Tabelle:
BewertungID | Eigenschaft | Von | Bis
1 | Eigenschaft1 | 0 | 100
1 | Eigenschaft3 | -100 | 200
2 | Eigenschaft1 | 0 | 200
2 | Eigenschaft2 | -300| 200
2 | Eigenschaft3 | 100 | 300
2 | Eigenschaft4 | -400 | 400
3 | Eigenschaft2 | 0 | 100
3 | Eigenschaft3 | -100 | 200
usw....
Also ein "Mapping" anhand der Spaltennamen...

hier meine Anregung mit SQL:

SQL:
SELECT ID,
IF(Eigenschaft1 < 100 AND Eigenschaft3 > -100 AND Eigenschaft3 < 200, 1, 0) AS bewertungA,
IF(Eigenschaft1 > 100 AND (Eigenschaft3 < -100 OR Eigenschaft3 > 200), 1, 0) AS bewertungB,
[weitere Bewertungen, ...]
FROM Produkte
ergibt dann eine Tabelle
Code:
ID | bewertungA | bewertungB | ... 
1 | 0 | 1 | ...
2 | 1 | 1 | ...
3 | 0 | 0 | ...
Grüße
Momolin
 

S2PID

Mitglied
in deinem Problem ist wenig informatik-haltiges vorhanden,
wenn du irgendwo die Information 'Erdbeeren' ablegen willst und woanders taucht mal 'Erdbeeren' auf, dann aber auch wieder 'Kirschen',
dann sieht man da eine Diskrepanz, mit welcher Bedeutung auch immer, aber was soll daran technisch zu lösen sein?

du kannst deine Bewertungstabelle sicherlich bisschen indirekt aufbohren,
statt in x Zeilen die Eigenschaft direkt hinzuschreiben kannst du auf eine andere Tabelle verweisen, dort einen Eintrag 'Eigenschaft', mit austauschbaren Namen, vielleicht sogar mehreren Sprachen, Versionen für verschiedene Zeitpunkte/ Systeme usw.,
so bist du grundsätzlich flexibler, kannst mit einmal Umschalten von 'Erdbeeren' auf 'Kirschen' gleich 20 Bewertungstabelle-Einträge aktualisieren, da sie alle auf einen Eigenschaft-Eintrag verweisen

geht es dir um solche Gedanken?

Nicht so ganz, es geht nicht um konkrete Inhalte der Eigenschaft, sondern um die Eigenschaft selbst.
Ich nehm das obere Beispiel mal mit einem konkreten Beispiel (auch wenn etwas an den Haaren herbeigezogen)

Tabelle Auto
ID | Name | Leistung| Beschleundigung| Türen | Airbags | Gewicht
--------------------------------------------
1 | Audi| 500 | 6 | 5 | 1 | 1200
2 | VW | 13 | 43 | 3 | 4 | 1400
3 | BMW| 400 | 3 | 5 | 3 | 1500

Und nun soll es Bewertungen geben. Ob ein Auto gut oder schelcht ist, abhängig von der Bewertung
BewertungID | Eigenschaft | Von | Bis
1 | Leistung | 50 | 100
1 | Türen | 4 | 5
2 | Leistung | 200 | 500
2 | Beschleundigung| 1| 10
2 | Türen | 3| 5
2 | Gewicht| 1000 | 1200
3 | Beschleundigung | 1 | 20
3 | Türen | 3| 5
Also die Eigenschaft ist der direkte Spaltenname der Tabelle Auto (und darüber bin ich unglücklich)


@Momolin
An Pivot Tabellen dachte ich auch schon, allerdings fliegt mir dann meine JPA Entity um die Ohren, die erzeugten Spalten lassen sich schlech abbilden, oder täusch ich mich?

Wie gesagt, Brett vorm Kopf, und das seit gestern :)
 
S

SlaterB

Gast
> Also die Eigenschaft ist der direkte Spaltenname der Tabelle Auto (und darüber bin ich unglücklich)

wie gesagt, könntest du aus direkt indirekt machen und dann etwas glücklicher sein oder auch nicht,
weil wie gesagt das Hauptproblem der unverknüpften Bezeichnungen besteht,
dazu hat die Datenbank aber ganz gewiss keine echten Verknüpfungsmittel,
das sollte unter Kontrolle der Anwendung stehen,

wenn du Tabelle und Bewertungs-Einträge nur in einem kontrollierten Programm eingibst/ änderst,
dann kannst du Vorhandensein usw. prüfen


vergleichbar ist das mit Java-Variablennamen und Benutzereingaben, auch dazu ist nichts vorgesehen


--------


was noch ginge wäre ein dynamischer Zusammenbau der Werte-Tabellen,
Tabelle Auto enthält nur Einträge
1
2
3
mit vielleicht noch nicht zu testenden festen Spalten

dazu gibt es eine Tabelle Auto-Eigenschaften-Verküpfung
1, 8
1, 9
1, 10
2, 11,
2, 12
2, 13

und eine Tabelle Auto-Eigenschaften
8, Leistung, 500 (die 500 Leistung von Auto 1)
9, Beschleundigung, 6 (entsprechend)
usw.,
statt 'Leistung' & Co. direkt als Text wäre wiederum ein indirekter Verweis auf eine andere Tabelle mit Einheit, Naturkonstanten-Min/ Max usw. möglich

dann könntest du einen Fremdschlüssel zur Kontrolle aufbauen,
was man mit der Dynamik verliert, ist natürlich eine gewisse Kontrolle, dass zu jedem Auto alle Eigenschaften vorhanden sind
 

S2PID

Mitglied
Ok hab ich nun verstanden was Du gemeint hast.
Aber eine "Best Practice"-Empfehlung gibt es nicht? Ich mein das Problem wird nicht so selten sein oder ?

Also ist mein Weg schon ein gangbarer Weg ?

Danke und Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M MySQL Spaltennamen abfragen Datenbankprogrammierung 2
U MySQL mit prepareStatement den Spaltennamen ansprechen Datenbankprogrammierung 5
Airwolf89 Spaltennamen einer Tabelle zurückgeben lassen Datenbankprogrammierung 9
M Spaltennamen einer MS Access Tabelle ermitteln Datenbankprogrammierung 3
B Spaltennamen von MySQL Datenbank nach Java auslesen Datenbankprogrammierung 10
P HELP! Tabelle sortieren wenn man auf Spaltennamen klickt SQL Datenbankprogrammierung 2
T ResultSet: Spaltennamen ermitteln Datenbankprogrammierung 8
J Spaltennamen ermitteln Datenbankprogrammierung 4
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
C Mapping mit Annotations von 2 Tabellen Datenbankprogrammierung 22
F Mapping SQL mit Klasse Datenbankprogrammierung 7
T JPA Mapping Enum (hibernate 5) Datenbankprogrammierung 1
N Enums und passendes Mapping Datenbankprogrammierung 6
G OR Mapping Datenbankprogrammierung 2
T MySQL Hibernate Mapping Datenbankprogrammierung 5
V Frage zu Hibernate-Mapping Datenbankprogrammierung 11
T Hibernate: Reverse Enigneering - kein Mapping von Beziehungen Datenbankprogrammierung 8
Eldorado Hibernate Mapping Datenbankprogrammierung 5
B Hibernate Mapping Problem Datenbankprogrammierung 3
S Hibernate Mapping Datenbankprogrammierung 3
lumo HIbernate: Could not read mapping document Datenbankprogrammierung 9
klattiator Aufklärung über OR-Mapping Datenbankprogrammierung 7
N OR-Mapping (Hibernate) versus JDBC Datenbankprogrammierung 5
M JPA Annotations @JoinTable oder eigenes Mapping Datenbankprogrammierung 13
S hibernate-Mapping schlägt fehl Datenbankprogrammierung 8
F Hibernate Mapping problem Datenbankprogrammierung 2
G OR Mapping Datenbankprogrammierung 2
F Type-Mapping von DB-Type zu ObjectType via Hibernate Datenbankprogrammierung 6
Y Hibernate - Problem bei Mapping Datenbankprogrammierung 7
Y Hibernate - Mapping der Beziehung zwischen 2 Tabellen Datenbankprogrammierung 2
G [Hibernate] Map von Dates Mapping mit Annotations Datenbankprogrammierung 6
G Hibernate Mapping für Interface Datenbankprogrammierung 3
S [Hibernate] Map in Map - Wie sieht Mapping Datei aus? Datenbankprogrammierung 10
C Hibernate-Mapping bei mehreren FK´s auf die selbe Tabelle Datenbankprogrammierung 12

Ähnliche Java Themen


Oben