Come archiviare i dati in un database senza tabelle?


12

Tutto ciò che ho imparato a scuola era SQL che salva i dati nelle tabelle. In questo momento sto lavorando a un progetto in cui i dati sono archiviati in file XML. Inoltre ogni XML contiene un riferimento a file visivi (JPEG).

Lo stesso XML contiene oltre mille punti di coordinate, oltre a informazioni aggiuntive sui dati.

A mio avviso, non avrebbe senso archiviare queste informazioni nelle tabelle. Inoltre non sono riuscito a memorizzare file JPEG con SQL.

Quale sarebbe la soluzione appropriata o c'è un errore nel ragionamento dalla mia parte?

Come puoi vedere, sono abbastanza nuovo nei database. Pertanto, eventuali suggerimenti, collegamenti e consigli costruttivi sono i benvenuti.


SQL Server può sicuramente archiviare file JPEG usando il tipo di dati IMAGE. Non lo consiglierei, comunque. Faresti meglio ad usare FILE-STREAM.
datagod

Quando si tratta di archiviare jpeg (o qualsiasi altro file) nel database, questo è stato gestito qui su alcune delle nostre domande più frequenti. Per quanto riguarda il modo di archiviare XML e quindi di trovare rapidamente quei dati, è praticamente ciò a cui servono i sistemi di archiviazione dei dati dei documenti. Vorrei guardare una soluzione NoSQL su un database relazionale, sarebbe più facile lavorare con, immagino.
jcolebrand

Quando si tratta di XML, DB2 di IBM ti consente di farlo. E puoi interrogare i dati con SQL o XPath / XQuery. La loro edizione Express-C gratuita ha la possibilità di farlo. Se passi all'edizione Enterprise, tuttavia, devi pagare per attivare questa funzione.
Chris Aldrich,

Risposte:


11

Tutto ciò di cui hai bisogno è la persistenza del tuo XML. Utilizzare una soluzione NoSQL o il file system.

Non vi è alcun vantaggio nell'uso di un RDBMS, a meno che non si desideri utilizzarlo al posto di NoSQL o del file system.


Quale sarebbe una soluzione NoSQL appropriata? Sto lavorando con C # in un'applicazione winform tra l'altro.
チ ー ズ パ ン

@bodycountPP: non ho esperienza con loro ...
gbn

7
Vorrei dare un'occhiata a RavenDB ( ravendb.net ) o CouchBase ( couchbase.com/couchbase-server/overview ) per l'uso su Windows. Altri possono essere trovati tramite Google - Ho avuto una buona esperienza con questi prodotti. Ovviamente il tuo chilometraggio può variare :)
ITHedgeHog

10

Ho inserito tra i preferiti il post sul blog di Phil Factor Normalization e 'Anima notitia copia' oggi che riassume accuratamente il caso a favore e contro la normalizzazione di alcuni tipi di dati. Esegui la seguente query su un'istanza SQL e verifica se sei d'accordo.

SELECT * FROM sys.syslanguages

SQL consente di creare database relazionali. Tuttavia, anche se ha un cattivo odore, non è un crimine fare cose orribilmente non relazionali con un database SQL fintanto che è necessario e si può dire la differenza; non solo, ma anche solo se sei consapevole dei rischi e delle implicazioni.

Hai menzionato che il file XML contiene "informazioni aggiuntive sui dati". C'è qualche vantaggio nel modellare quei metadati in un database relazionale, forse a fini di interrogatorio? In tal caso, potrebbe esserci un caso per l'estrazione dei dati rilevanti e la persistenza dell'XML rimanente come tipo di documento XML.

... se ti viene passata una stringa JSON o XML e ti viene richiesto di memorizzarla in un database, allora tutto ciò che devi fare è chiederti, nel tuo ruolo di Anima notitia copia (Anima del database) 'ho qualche interesse per il contenuto di questa informazione? '. Se la risposta è "No!" O "nequequam! Quindi è un valore atomico, per quanto complesso possa essere.

L'argomento di Phil Factor è che i campi non relazionali in un database relazionale sono perfettamente accettabili se il campo è trattato come atomico, cioè non cambia, o quando cambia l'intero campo, non una parte costituente di esso. La naturale estensione di questo è che se il tuo documento contiene elementi di tuo interesse, potrebbe esserci un valore nell'applicare un modello relazionale a quegli elementi.

Rilevante per la domanda, ma principalmente per la fraseologia, un'ultima citazione di Phil:

Ovviamente, non ho mai creato consapevolmente un database a cui Codd si sarebbe accigliato, ma intorno ai bordi ci sono interfacce e feed di dati che ho scritto che hanno causato problemi di confusione tra i fondamentalisti della normalizzazione.

Non abbiamo tutti!


2
ACORD è un po 'così. Ho visto persone che cercavano di farlo diventare un modello di database. Successivamente ACORD andò a concedere in licenza un modello di dati da Prima, quindi anche loro ammettono che non era molto simile a un modello di dati. Lo standard di messaggistica ACORD ha circa 7000 campi definiti, di cui circa 200 sono obbligatori - la migliore descrizione di ACORD (da parte di qualcuno fortemente coinvolto negli standard di messaggistica) è che "non sanno come gestire un processo standard".
ConcernedOfTunbridgeWells,

3

Per quanto riguarda i database Oracle, la risposta è che non puoi . Tutti i dati in un database sono archiviati in tabelle, anche metadati. I dati possono essere archiviati in code, ma questi sono solo un modo diverso di usare le tabelle. I file XML possono essere archiviati al di fuori di un database, ma ciò non soddisfa il requisito "nel database".

Andando oltre la domanda dichiarata, i file JPEG o qualsiasi altro file possono essere archiviati in un database. Richiederebbero una tabella e una colonna LOB (BLOB o CLOB). Anche l'XML può essere archiviato in questo modo, ma l'importazione dei dati XML nel database consentirebbe di operare sui dati in modi che non possono essere facilmente eseguiti ora. Fornirebbe anche altri vantaggi dei database, tra cui: ridondanza ridotta, accessibilità, concorrenza, scalabilità, interoperabilità, sicurezza, recupero e prestazioni.

Se i vantaggi di un database non promuovono i tuoi obiettivi, non utilizzarne uno.


2

Mi sembra che tu stia cercando di implementare un database spaziale . Questo è un tipo di database relazionale (o un componente aggiuntivo a prodotti di database esistenti, ad esempio Oracle Spatial, postGIS) che supporta funzioni di tipi di dati spaziali e viene utilizzato per ottimizzare l'archiviazione e le query per i dati relativi a caratteristiche spaziali come confini poligonali, punti e strati. L'XML in uso suona come coppie di coordinate di confine e le immagini associate sembrano risorse di grafica da visualizzare in quel limite. Se i dati si adattano, prendere in considerazione un database spaziale relazionale che offre la modellazione spaziale integrata per fornire funzionalità che altrimenti si potrebbero trovare difficili o dispendiose in termini di tempo da implementare.


Inoltre, se si sta implementando un Sistema Informativo Territoriale , prendere in considerazione questa domanda sopra su Sistemi Informativi Geografici .
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.