2010-02-06 16 views
6

Ho esaminato l'argomento e ho trovato questo collegamento molto utile e semplice allo stesso tempo. Storing matrices in a relational database Ma si può per favore fatemelo sapere se il modo menzionato comeMatrici e basi di dati

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

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

è il modo migliore e più semplice o anche affidabile di immagazzinare gli elementi di matrice nel database. Inoltre ho bisogno di moltiplicare due matrici e rendere l'operazione dinamica. Lo storage dei dati creerà quindi problemi per l'attività?

risposta

0

è il modo migliore, semplice o addirittura affidabile per memorizzare gli elementi di matrice nel database. Inoltre ho bisogno di moltiplicare due matrici e rendere l'operazione dinamica. Lo storage dei dati creerà quindi problemi per l'attività?

Inizierò dicendo che entrambi gli approcci sono validi, ma il secondo non è sufficiente come scritto da voi. Devi avere qualche altra informazione, come la lunghezza delle righe o gli indici (riga, col) di ciascun elemento per memorizzare una matrice come array 1D. Questo è comunemente fatto per matrici sparse, dove ci sono molti zeri che circondano i valori raggruppati su entrambi i lati della diagonale.

La persistenza della matrice in un database e il suo funzionamento in memoria sono due cose separate.

Attività come moltiplicare gli indici require (row, col). Memorizzare la matrice come array 2D significa che li avrai, quindi non sono necessarie altre informazioni. Anche l'array 1D ha bisogno di queste informazioni, quindi dovrai fornirle.

Il vantaggio si adatta all'array 1D per le matrici sparse. In questo caso non è necessario memorizzare valori zero al di fuori della larghezza di banda, ma le operazioni come addizione e moltiplicazione diventano più complesse per il codice.

0

Penso che praticamente dipende da come si desidera utilizzare le matrici nella propria applicazione.

Il DB è solo per la persistenza per la stessa applicazione, la velocità è importante e le dimensioni non possono essere conosciute in anticipo? Crea il tuo schema di serializzazione e salva il blob binario.

Il DB per la condivisione tra le applicazioni, con le dimensioni non note in anticipo? Utilizzare l'elenco delimitato da virgole.

Siete preoccupati dell'integrità dei dati, della sicurezza del tipo e volete interrogare le singole celle? Quindi utilizzare lo schema (riga, colonna, valore cella).

Sapete che le vostre matrici sono di dimensioni fisse e relativamente piccole, ad esempio le matrici di trasformazione 4X4, e avranno una relazione 1 a 1 con qualsiasi elemento che avete nel DB? Quindi potresti avere 16 righe nel tuo tavolo, disposte in fila.

Pensa ai tuoi casi d'uso e sperimenta!

1

In postgresql è possibile disporre di array multidimensionali, definire i propri tipi e definire le proprie funzioni su tali tipi. Per esempio si potrebbe semplicemente fare:

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

Vedi The PostgreSQL manual per informazioni su come creare i propri tipi.

Problemi correlati