Daten mehrerer Tabellen "denormalisieren"

#1
Hallo Gemeinde,

ich habe hier eine Datenbank, deren Tabellen Daten enthalten, die ich gerne auswerten möchte. Es handelt sich um chemische Stoffe. Die Stoffe werden durch 120 Eigenschaften charakterisiert, die sie entweder erfüllen oder nicht. Ich möchte nun mit Algorithmen zur Suche nach ähnlichen Stoffen (ähnlichkeit anhand gleicher Eigenschaftsausprägungen) an die Daten herangehen. Dazu benötige ich eine Matrix, auf der zeilenweise die Stoffe und spaltenweise deren Eigenschaften abgetragen sind. Sofern die Eigenschaft bei dem Stoff erfüllt ist, wird eine 1 eingetragen, eine 0 falls nicht:
S1.png

Nun habe ich dummerweise die Daten in der Datenbank normalisiert vorliegen. Es gibt eine Tabelle mit den Substanzen, eine mit den Eigenschaften und eine Kreuztabelle zum Mapping von Substanzen zu Eigenschaften.

Wenn ich nun die Eigenschaften aller Substanzen aus den Tabellen abfrage, dann bekomme ich Daten in folgendem Schema:

S2.png

Nun muss ich die Daten in die Matrix übertragen. Dazu könnte ich mir ein kleines Tool basteln, jedoch befinden sich gerade 800.000 Stoffe in meiner DB und bei 120 Eigenschaften wäre die Laufzeit wohl nicht ideal beim Iterieren über jedes Element. Gibt es da vielleicht eine Möglichkeit, die Daten bereits im DBMS so zu transformieren, dass Sie zumindest in einer nicht normalisierten Tableauform aufgebaut werden, also eine neue Tabelle erstellen mit einer Spalte je Eigenschaft?
 

dominikb

Well-Known Member
#2
Ist das Übertragen in die Matrix ein einmaliger Vorgang oder ein Prozess, der sich immer wieder wiederholt?

Wenn du das kartesische Produkt nur einmalig speichern (also in die Matrix eintragen) willst, würde ich mir den Aufwand mit der neuen Tabelle sparen. In der Zeit, in der du alle Ausprägungen in die neue Tabelle schreibst, kannst du sie auch gleich anderweitig wegspeichern.

Sollte es sich um einen zyklischen Prozess handeln, bei dem regelmäßig die Tabellen gejoint werden, würde ich dann aber doch eine denormalisierte DB verwenden. Der Verlust der Normalisierung dürfte in deinem Anwendungsfall nicht allzu tragisch sein, da sich die Bezeichnungen der Stoffe/Eigenschaften wohl kaum ändern werden.
 
Oben