(Questo post è sollecitare esperienze personali sulla memorizzazione XML;. Si prega di condividere ciò che si sa :-))Determinare se memorizzare i dati XML come XML o in tabelle normalizzate
Sto lavorando su un'applicazione di servizio che comunica con un servizio esterno che utilizza XML. Sto pianificando di utilizzare SQL Server 2008 per archiviare l'XML ricevuto e inviato al servizio esterno. Sto esplorando le mie opzioni per l'archiviazione dell'XML nel database. Le tre opzioni che ho individuate sono:
- Conservare l'XML in una colonna di tipo di dati XML
- creare le tabelle per memorizzare le varie relazioni padre e figlio rappresentate nel XML.
- Un ibrido dei due precedenti approcci in cui l'XML originale è memorizzato in una colonna di tipo di dati XML ma diversi campi dell'XML sono suddivisi nelle proprie colonne per semplificare le query e l'indicizzazione.
Sto cercando qualsiasi consiglio, in base alla vostra esperienza personale, con l'archiviazione e il recupero di dati XML in SQL Server.
Alcuni dati aggiuntivi: ho utilizzato un equivalente 'xsd.exe' chiamato XsdObjectgenerator per creare classi .net basate sugli schemi XML. Quando il servizio riceve il file XML, viene deserializzato in un'istanza di classe .net. Questa istanza viene utilizzata per eseguire le operazioni del servizio. Il mio piano originale era quindi utilizzare l'opzione n. 1 sopra per memorizzare l'XML. Se dovessi aggiornare o riportare i dati, avrei semplicemente deserializzato il record db in una delle mie classi .net.
Anche se questo approccio funziona e semplifica il lavoro con l'xml, temo che con l'aumento del volume di dati, le prestazioni di query sui record dei tipi di dati XML diminuiscano. Questo è il motivo per cui ho esplorato le opzioni 2. & 3. sopra.
Oltre all'archiviazione dell'XML, l'XML verrà interrogato per l'utilizzo in entrambi i report e in un'applicazione Web separata. I record db verranno interrogati, ordinati, filtrati, raggruppati, sommati e eventualmente aggiornati dagli utenti finali.
che definirei le intenzioni del "Logging DB" in modo più chiaro. sembra proprio che dovresti semplicemente archiviare gli xml compressi in una directory e avere questo come riserva, quando vuoi fare dei report su di essi. inoltre è estremamente facile eseguire il backup di questi file, o spostarli fuori dal sistema live, piuttosto che esportare parti di un DB. – cRichter
Grazie per il tuo commento. Ho aggiunto ulteriori dettagli sopra. – Dean