Aggiornamento parziale della tabella del database

1

Ho una tabella di database con numerosi campi che includono "categoria". L'origine di questa tabella è un file xml che il sistema riceve occasionalmente. Ogni file xml contiene dati per una categoria. La tabella deve essere aggiornata con i nuovi dati di categoria dal file xml. Il file xml include tutti i dati per quella categoria, non solo le modifiche.

Vedo due possibili modi per gestirlo:

  1. Prima cancella tutte le righe dalla tabella dove category = categoryID, e poi facendo inserimenti basati su tutti i dati xml. Ovviamente le operazioni di cancellazione e inserimento sarebbero contenute in una transazione.

  2. Per ogni record in xml, prima fai una selezione per testare se quel record esiste. Se esiste, aggiorna i dati con quello dal xml. Se non esiste, inseriscilo.

Ovviamente, il secondo approccio evita di eliminare prima i dati, ma coinvolge molte altre query db anche se questo potrebbe essere mitigato eseguendo una selezione iniziale su una tabella hash e semplicemente interrogando l'hash. Il grande svantaggio del secondo approccio è come gestire le eliminazioni, cioè i record che non appaiono più nell'xml e dovrebbero essere rimossi dalla tabella.

Qual è la migliore pratica per gestire questo tipo di operazione?

Grazie.

    
posta John Steed 10.07.2015 - 16:51
fonte

2 risposte

2

Dato che hai la chiave primaria di ogni record, consiglio vivamente di utilizzare l'approccio di esaminare ogni record individualmente.

  • Le ricerche di chiavi primarie sono estremamente veloci in qualsiasi database di livello professionale.

  • L'aggiornamento di un record basato sulla chiave primaria ha un livello di blocco molto dettagliato ed è rapido.

  • Inserendo o aggiornando anziché eliminare / inserire, si mantiene l'esistenza dei dati: in nessun momento è possibile interrogare la tabella category e arrivare vuota (a meno che non si stia interrogando una categoria che si ha non sono riuscito a inserire ancora).

In breve, non preoccuparti di eseguire query aggiuntive qui perché le query verranno eseguite il più velocemente possibile. Presumo anche che le categorie siano relativamente fisse in quantità, rispetto a un evento di registrazione o transazione bancaria che aumenta sempre la quantità di dati.

    
risposta data 10.07.2015 - 17:09
fonte
1

Sono d'accordo con Snowman e penso che dovresti fare tutte le domande. Oltre al fatto che le prestazioni sono trascurabili, puoi ottenere alcune informazioni sulle modifiche dei dati che potrebbero essere utili a te e / o agli utenti:

  1. Nuove categorie
  2. Categorie rimosse
  3. Categorie che sono cambiate.

Qualcuno alla fine chiederà cosa è successo. "Abbiamo un nuovo file", non sarà sufficiente.

    
risposta data 11.07.2015 - 00:01
fonte

Leggi altre domande sui tag