Hello,
Im Prinzip kannst Du den Fehler nur beheben, indem Du das die Datenbank machen lässt und diese nur mit "varianten Typen" arbeiten lässt,
ein Antipattern. Lesetipp: http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back
Wenn man zu früh aufhört, aufzulösen, wahrscheinlich.
Es geht ja um das Problem, dass ein Kenndatensatz mehrere Eigenschaften haben kann, der durch mehrere Attribute gekennzeichnet werden kann. Dabei hat die eine Eigenschaft z.B.
Beschreibung Text
Breite decimal
Höhe decimal
Die andere
Bezeichnung varchar
Version decimal
Speed MHz float
Pins int
die nächste
Date-Entry Date
Date-Leave Date
Wenn man nun nur bis zur Ebene "Eigenschaftsart" auflösen würde, hätte man in der Tabelle "Eigenschaften" unterschiedliche Typen, die nicht vereinbar wären.
Man müsste also hier nomals "eine Art M:N-Beziehung" einführen, die dann dazu führt, dass nachher alle Ints in einer Tabelle landen, alle Floats in der nächsten, alle Dates in der dritten, usw. Man muss hier also nicht logisch, sondern physisch aufteilen.
Wenn ich schreibe "eine Art M:N-Beziehung", dann deshalb, weil man hier bereits beim Design des Datenmodells eine "steinerndes Union" vorsehen kann. Dass während der Lebensdauer der Datenbank Datentypen hinzukommen, ist relativ unwahrscheinlich, wenn auch nicht unmöglich.
Und das kann man bei den meisten Datenbanken am besten durch benutzerdefinierte Funktionen, mit deren Hilfe man dann eben den Kenndatensatz zusammenbauen kann. Die Funktionen kann man so universell halten, dass man sie für das gesamte Projekt nur einmal zu erstellen hat. Der Rest geht dann durch Parametriesierung in der Abfrage.
Man erspart sich durch eine solche "Union-Funktion" über die "Bau_Steine_" der Datenbank eine Menge Schreibkram in der Abfrage.
Problematisch wird das dann wieder, wenn ich Äpfel mit Computern oder Eierpötte mit Kartoffelarten vergleichen will, was ja eigentlich nicht geht, beim Listen aber immer gerne wieder versucht wird.
Wie groß muss der Ergebnisdatensatz in der Breite dann werden?
Die Eigenschaften müssen daher eine klare semantische Bedeuting haben. Sie müssen auch auf eine eineindeutige Dimension zurückgeführt werden. "Gewicht" ist eine Eigenschaft, über die ich auch Kartoffeln mit Computern vergleich könnte...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg