C
Camino
Gast
Hallo, ich hab da ein ziemlich ungewöhnliches Problem.
Ich bin gerade bei einer Datenbankmigration und Erstellung einer Anwendung in Swing zur Verwaltung der Daten. Dabei habe ich nun festgestellt, dass in der alten Datenbank (Access) der frühere Entwickler in einer DB-Tabelle zwei Integer-Wert gespeichert hat, bei denen es sich nach weiteren Recherchen wohl um eine Kanonische Disjunktive Normalform (KDNF) handelt. Ich hab zwar weiter im Internet gesucht und auch die Funktionsweise und den Sinn so einigermassen verstanden, aber das ist alles ziemlich hoch-mathematisch und mir hat irgendwann der Kopf gequalmt. Vielleicht hat ja hier jemand schon mit so etwas gearbeitet und kann mir weiterhelfen. Interessieren würde mich, ob so etwas überhaupt sinnvoll ist und normalerweise angewendet wird. Wenn ja, bräuchte ich einen Ansatz, wie ich das am einfachsten umrechnen kann.
Erst mal grundsätzliches zur KDNF (falls das jemand noch nicht kennt) und konkretes zu meinem Beispiel:
In der DB-Tabelle ist also ein einziger Integer-Wert gespeichert, der den Zustand von 10 Boolean-Werten widergeben soll. Vermutlich aus Gründen der einfachen Übersichtlichkeit, also um sich eine Menge an Boolean-Feldern zu ersparen. Die Integerzahl ergibt sich aus 512 + 2 hoch n, wobei n = 0, 1, 2, 3, 4... also die Anzahl der Boolean-Werte darstellt. Dadurch ergibt sich für den ersten Wert 2 hoch 0 = 1, der 2. Wert 2 hoch 1 = 2, der 3. Wert 2 hoch 2 = 4 usw. Durch Addition der Ergebnisse (1+2+4+8+16+32+64+128+256+512) kann in der Zahl eindeutig festgestellt werden, welche n-Werte ausgewählt wurden und somit dem Zustand true entsprechen würden, die restlichen anderen erhalten dann den Zustand false.
So , nun meine Fragen:
Weiss jemand, warum bei der Zahl bei 512 zu rechnen angefangen wurde? Man hätte ja auch bei 0 anfangen und nur die 2 hoch n zusammenzählen können. Eine Vermutung hatte ich, als ich mal die 10 n-Werte ausgerechnet hatte und der letzte (10.) Wert 512 ergab. Möglich wäre ja, dass mit der 512 als Startzahl auch die maximale Anzahl an n-Werten bestimmt wird.
OK, die Funktionsweise und der Sinn der KDNF ist mir so langsam klar geworden. Aber wie rechne ich das nun um. Der eine Weg ist ziemlich einfach: ich schaue, welche Boolean-Werte ausgewählt wurden (= true sind), rechne die in ihrer Reihenfolge (n) hoch 2, zähle die Werte zusammen und schreibe die Zahl in die Datenbank. Aber wenn ich nun die Zahl aus der DB hole, wie rechne ich das um, dass ich von der Zahl auf die gesetzten n-Werte komme? Gibt es da eine einfache mathematische Lösung?
Interessieren würde mich auch, was ihr davon haltet. Ist das sinnvoll oder völliger Quatsch? Sollte ich das in der neuen Datenbank auch so umsetzen, oder lieber pro Zahl 10 Boolean-Felder nehmen? Das wären jetzt konkret in der einen Tabelle zwei Zahlen also 20 zusätzliche Felder. Ein Vorteil wäre wohl, dass ich bei der Migration der DB die Zahlen einfach übernehmen könnte.
Ich bin leider mit meinem mathematischen Wissen an eine Grenze gestossen und würde mich über Hilfe und Input zu diesem ungewöhnlichen Thema freuen...
Viele Grüsse
Camino
Ich bin gerade bei einer Datenbankmigration und Erstellung einer Anwendung in Swing zur Verwaltung der Daten. Dabei habe ich nun festgestellt, dass in der alten Datenbank (Access) der frühere Entwickler in einer DB-Tabelle zwei Integer-Wert gespeichert hat, bei denen es sich nach weiteren Recherchen wohl um eine Kanonische Disjunktive Normalform (KDNF) handelt. Ich hab zwar weiter im Internet gesucht und auch die Funktionsweise und den Sinn so einigermassen verstanden, aber das ist alles ziemlich hoch-mathematisch und mir hat irgendwann der Kopf gequalmt. Vielleicht hat ja hier jemand schon mit so etwas gearbeitet und kann mir weiterhelfen. Interessieren würde mich, ob so etwas überhaupt sinnvoll ist und normalerweise angewendet wird. Wenn ja, bräuchte ich einen Ansatz, wie ich das am einfachsten umrechnen kann.
Erst mal grundsätzliches zur KDNF (falls das jemand noch nicht kennt) und konkretes zu meinem Beispiel:
In der DB-Tabelle ist also ein einziger Integer-Wert gespeichert, der den Zustand von 10 Boolean-Werten widergeben soll. Vermutlich aus Gründen der einfachen Übersichtlichkeit, also um sich eine Menge an Boolean-Feldern zu ersparen. Die Integerzahl ergibt sich aus 512 + 2 hoch n, wobei n = 0, 1, 2, 3, 4... also die Anzahl der Boolean-Werte darstellt. Dadurch ergibt sich für den ersten Wert 2 hoch 0 = 1, der 2. Wert 2 hoch 1 = 2, der 3. Wert 2 hoch 2 = 4 usw. Durch Addition der Ergebnisse (1+2+4+8+16+32+64+128+256+512) kann in der Zahl eindeutig festgestellt werden, welche n-Werte ausgewählt wurden und somit dem Zustand true entsprechen würden, die restlichen anderen erhalten dann den Zustand false.
So , nun meine Fragen:
Weiss jemand, warum bei der Zahl bei 512 zu rechnen angefangen wurde? Man hätte ja auch bei 0 anfangen und nur die 2 hoch n zusammenzählen können. Eine Vermutung hatte ich, als ich mal die 10 n-Werte ausgerechnet hatte und der letzte (10.) Wert 512 ergab. Möglich wäre ja, dass mit der 512 als Startzahl auch die maximale Anzahl an n-Werten bestimmt wird.
OK, die Funktionsweise und der Sinn der KDNF ist mir so langsam klar geworden. Aber wie rechne ich das nun um. Der eine Weg ist ziemlich einfach: ich schaue, welche Boolean-Werte ausgewählt wurden (= true sind), rechne die in ihrer Reihenfolge (n) hoch 2, zähle die Werte zusammen und schreibe die Zahl in die Datenbank. Aber wenn ich nun die Zahl aus der DB hole, wie rechne ich das um, dass ich von der Zahl auf die gesetzten n-Werte komme? Gibt es da eine einfache mathematische Lösung?
Interessieren würde mich auch, was ihr davon haltet. Ist das sinnvoll oder völliger Quatsch? Sollte ich das in der neuen Datenbank auch so umsetzen, oder lieber pro Zahl 10 Boolean-Felder nehmen? Das wären jetzt konkret in der einen Tabelle zwei Zahlen also 20 zusätzliche Felder. Ein Vorteil wäre wohl, dass ich bei der Migration der DB die Zahlen einfach übernehmen könnte.
Ich bin leider mit meinem mathematischen Wissen an eine Grenze gestossen und würde mich über Hilfe und Input zu diesem ungewöhnlichen Thema freuen...
Viele Grüsse
Camino