2010-02-06 4 views
6

Ich ging durch das Thema und fand diesen Link sehr nützlich und einfach zugleich. Storing matrices in a relational database Aber können Sie mir bitte mitteilen, ob die Art und Weise Matrizen und Datenbanken

A B C D 
E F G H 
I J K L 

[A B C D E F G H I J K L] 

als

erwähnt ist die beste und einfache oder sogar zuverlässige Art und Weise in der Datenbank der Matrixelemente zu speichern. Außerdem muss ich zwei Matrizen multiplizieren und die Operation dynamisch machen. Wird das Speichern von Daten Probleme für die Aufgabe verursachen?

Antwort

0

ist die beste und einfachste oder sogar zuverlässige Art der Speicherung der Matrixelemente in der Datenbank. Außerdem muss ich zwei Matrizen multiplizieren und die Operation dynamisch machen. Wird das Speichern von Daten Probleme für die Aufgabe verursachen?

Ich fange mit der Aussage an, dass beide Ansätze gültig sind, aber der zweite ist nicht ausreichend, wie von Ihnen geschrieben. Sie müssen einige andere Informationen haben, wie die Länge der Zeilen oder die (Zeilen-, Spalten-) Indizes jedes Elements, um eine Matrix als ein 1D-Array zu speichern. Dies wird üblicherweise für dünn besetzte Matrizen durchgeführt, bei denen viele Nullen um die Werte auf jeder Seite der Diagonale gruppiert sind.

Die Matrix in einer Datenbank zu speichern und im Speicher zu arbeiten, sind zwei verschiedene Dinge.

Aufgaben wie die Multiplikation erfordern (Zeilen-, Spalten-) Indizes. Speichern der Matrix als 2D-Array bedeutet, dass Sie sie haben, so dass keine anderen Informationen benötigt werden. Das 1D-Array benötigt diese Informationen ebenfalls, also müssen Sie es liefern.

Der Vorteil schwingt zum 1D-Array für spärliche Matrizen. Sie müssen in diesem Fall keine Nullwerte außerhalb der Bandbreite speichern, aber Ihre Operationen wie Addition und Multiplikation werden komplexer.

0

Ich denke, es hängt ziemlich davon ab, wie Sie die Matrizen in Ihrer Anwendung verwenden möchten.

Ist die DB nur für Persistenz für die gleiche Anwendung, Geschwindigkeit ist wichtig, und Größen können nicht im Voraus bekannt sein? Erstellen Sie Ihr eigenes Serialisierungsschema, und speichern Sie das binäre BLOB.

Ist die DB für die Freigabe zwischen Anwendungen, mit der Größe nicht im Voraus bekannt? Verwenden Sie die durch Kommas getrennte Liste.

Sind Sie besorgt über Datenintegrität, geben Sie Sicherheit ein und möchten Sie einzelne Zellen abfragen? Verwenden Sie dann das Schema (Zeile, Spalte, Zellenwert).

Wissen Sie, dass Ihre Matrizen von fester Größe und relativ klein sind, zum Beispiel 4X4-Transformationsmatrizen, und eine Beziehung von 1 zu 1 zu dem Element haben, das Sie in der Datenbank haben? Dann könnten Sie tatsächlich 16 Zeilen in Ihrem Tisch haben, die in einer Reihe angeordnet sind.

Denken Sie über Ihre Anwendungsfälle nach und experimentieren Sie!

1

In postgresql können Sie tatsächlich mehrdimensionale Arrays haben, definieren Sie Ihre eigenen Typen und definieren Sie Ihre eigenen Funktionen auf diesen Typen. Zum Beispiel könnte man einfach tun:

CREATE TABLE tictactoe (
    squares integer[3][3] 
); 

Siehe The PostgreSQL manual für Informationen darüber, wie Sie Ihre eigenen Arten erstellen.