2016-04-17 23 views
6

Attualmente sto cercando di progettare un database e non sono troppo sicuro del modo migliore per accedere a un campo array di dimensioni dinamiche di uno dei miei oggetti. Il mio primo pensiero è di usare una colonna nel mio oggetto per memorizzare una matrice di numeri interi. Comunque più leggo, più penso che questa non sia l'opzione migliore. Esempio concreto saggio, ho un oggetto giocatore che memorizza 0 in molti oggetti, che sono rappresentati da un numero intero. Qual è il modo migliore per rappresentarlo?Qual è il modo migliore per memorizzare un array in un database relazionale?

risposta

10

Se la raccolta di valori è atomica, memorizzarli insieme. Significa, se ti interessa sempre l'intero gruppo, se non cerchi mai valori annidati e non ordini mai per valori nidificati, allora dovrebbero essere memorizzati insieme come un singolo valore di campo.

In caso contrario, devono essere archiviati in una tabella separata, ogni valore porta una riga, a ciascuno assegnato l'ID padre (chiave esterna) di un record sull'altra tabella che li "possiede" come gruppo.

Ad esempio, un gruppo di letture da uno strumento scientifico che vengono sempre utilizzate insieme come una raccolta per l'analisi deve essere memorizzato insieme in un campo. Al contrario, un elenco di numeri di telefono per un cliente che potrebbe dover essere interrogato per un numero individuale dovrebbe probabilmente essere suddiviso in un unico numero di telefono per riga in una tabella figlio correlata.

Per ulteriori informazioni, cercare il termine "normalizzazione del database".

Alcuni database supportano un array come tipo di dati. Ad esempio, Postgres consente di definire una colonna come un array a dimensione singola o anche a due dimensioni.

Se il database non supporta array come un tipo di definizione di colonna, allora si può avere tre alternative:

  • XML/JSON
    di trasformare la raccolta di dati in un documento XML o JSON se il database il database supporta quel tipo. Ad esempio, Postgres dispone di supporto di base per l'archiviazione, il recupero e la ricerca non indicizzata di XML utilizzando XPath. E Postgres offre un eccellente supporto di settore per JSON come un tipo di dati che include il supporto indicizzato su valori nidificati con il suo tipo di dati jsonb dove JSON in ingresso viene analizzato e archiviato in un formato binario definito internamente. Questa funzionalità affronta uno dei motivi principali per cui le persone considerano l'utilizzo dei cosiddetti sistemi "NoSQL", cercando di archiviare e cercare semi-structured data.
  • Testo
    Creare una rappresentazione di stringa dei dati da memorizzare come testo.
  • BLOB
    Creare un valore binario da memorizzare come BLOB.
Problemi correlati