# Spaltennamen "Mapping"



## S2PID (3. Apr 2012)

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)


----------



## SlaterB (3. Apr 2012)

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 (3. Apr 2012)

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:


S2PID hat gesagt.:


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



hier meine Anregung mit 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

```
ID | bewertungA | bewertungB | ... 
1 | 0 | 1 | ...
2 | 1 | 1 | ...
3 | 0 | 0 | ...
```
Grüße
Momolin


----------



## S2PID (3. Apr 2012)

SlaterB hat gesagt.:


> 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?
> 
> ...



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


----------



## SlaterB (3. Apr 2012)

> 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 (3. Apr 2012)

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


----------

