Migrazione dei dati in un'unica tabella SQL condivisa

2

Abbiamo tre applicazioni Web interne che utilizziamo nella mia azienda. Sfortunatamente nessuno dei miei predecessori ha avuto la previsione di condividere tabelle tra quelle app.

È diventato necessario condividere alcuni dati aziendali tra le tre app Web interne. Ad esempio, ciascuno dei tre siti Web ha una tabella companies nei rispettivi database.

Sito web Una tabella aziende

id | name
---------
1  | Sprockleys Sprockets
2  | Goobers Gadgets
3  | Nancys Necklaces

Tabella aziende B del sito web

id | name
---------
3  | Sprockleys Sprockets DENVER
22 | Gooburrs Gadgets
30 | Nancyies Necklaces

Voglio in qualche modo unire tutti questi dati insieme in un'unica tabella di database condivisa. Sfortunatamente gli ID delle aziende non coincidono e altre tabelle hanno chiavi esterne che mappano prodotti e utenti a quelle aziende.

Quali sono alcune idee per unire dati come questo?

    
posta Chris G. 19.04.2012 - 23:28
fonte

4 risposte

2

Assicurati che tutti capiscano quanto sarà difficile per tutti. Identificare i benefici per l'azienda. Ciò che suona bene in teoria non funziona sempre nella pratica.

Tutti sono coinvolti, tranne che gli sviluppatori vorranno una soluzione perfetta che unirà automaticamente tutti questi diversi ID aziendali (sbarazzati dei duplicati) senza alcuna immissione manuale dei dati da parte loro. Perché sono così certe cose come nomi, indirizzi e numeri di telefono sarà una corrispondenza perfetta. Non ci credere fino a quando non puoi provarlo.

Un altro è quando stai lavorando per ripulire questo elenco, i nuovi duplicati stanno per essere inseriti.

  1. I record di tutte e 3 le tabelle vengono copiati nella nuova tabella in modo che: A) Riceveranno una nuova chiave primaria B) Tieni traccia del vecchio ID con i duplicati in una colonna C) con una colonna per identificare il database da cui hanno avuto origine.
  2. Propaga la nuova chiave per tutti e tre i database e aggiorna i record delle chiavi esterne (il vecchio ID e gli identificatori del database rendono possibile ciò.
  3. Inserisci il codice per utilizzare la nuova tabella singola.
  4. Aggiorna i vincoli per utilizzare la nuova tabella.

Potresti farlo nelle fasi in cui hai tutto il CRUD del cliente che usa la nuova tabella e un trigger di qualche tipo per mantenere sincronizzate le 3 tabelle esistenti. Questo dipende da quanto tempo è necessario modificare il codice per utilizzare la nuova tabella per tutte le altre funzionalità. Potrebbero esserci strumenti di segnalazione con connessioni hardcoded. In pratica, esegui il sistema a tavolo singolo in parallelo con il sistema a tavolo triplo.

Avrai anche bisogno di una funzionalità nella tua applicazione per unire le voci duplicate della società. Automatizza questo tanto quanto ti senti a tuo agio, ma alla fine ci deve essere un processo manuale. Non c'è nulla che impedisca a un utente di entrare nella stessa azienda due volte. È possibile limitare e limitare e controllare la presenza di duplicati e fornire tutti i messaggi di errore che si possono pensare e qualcuno sta per fare tutto il possibile per bloccare l'azienda. Qualcuno lo individuerà e ti chiederà come risolvere il problema.

    
risposta data 20.04.2012 - 00:22
fonte
0

Devi farlo in tre fasi.

  1. Crea una nuova tabella centrale con una nuova chiave, i dettagli sull'indirizzo del nome ecc. e una colonna per la chiave valuta le tabelle esistenti . Carica qui i dati delle tre fonti.

  2. Identifica e unisci righe duplicate. Questa deve essere una procedura ibrida automatica / manuale. Chiedi a un programma di identificare i possibili duplicati e poi a un processo di approvazione / rifiuto manuale.

  3. Cambia le tre app esistenti per utilizzare il nuovo DB centrale. MA ogni app deve utilizzare la sua chiave "vecchia" per accedere ai dati (le visualizzazioni del database possono aiutarti)!

Ci sono ancora alcuni problemi da risolvere: avrai bisogno di un'app comune per cercare clienti esistenti e / o aggiungere nuovi clienti, - avrai bisogno di un processo (per lo più manuale) per la risoluzione di diverse voci per lo stesso cliente ("Acme Widget Company" v. "Acme Widget Co." ecc.).

    
risposta data 20.04.2012 - 04:50
fonte
0

Dal momento che la complessità è meglio essere servita da piccole porzioni, penso che questo può essere fatto con due grandi passi:

  • Crea una tabella intermedia [CompanyName], [OldId1] [OldId2] ... [NewId] (se il nome dell'azienda è ciò che condividono). Non so quale sia il tuo DBMS, ma per esempio Sqlite consente di collegare database nella stessa sessione e di lavorare con loro su query comuni. Questo passaggio è sicuro per i tuoi dati e, oltre a crearlo, guarderei i diversi selezioni e i join di questa nuova tabella con tabelle separate poiché l'occhio umano è il miglior tester se qualcosa non va nel tuo approccio. Anche una semplice selezione da questa tabella ti consentirà di rilevare tali anomalie come NULL imprevisti.
  • Esegui le modifiche necessarie alla tabella esistente e nuova in base a questa nuova mappatura.
risposta data 20.04.2012 - 06:09
fonte
0

Usa le proposizioni di cui sopra per unire le 3 tabelle in una. Assicurati di mantenere nella nuova tabella la vecchia chiave.

Dopo aver fatto ciò, il problema principale è consolidare la stessa azienda con ID diversi.

Dipende da quanto tempo e risorse hai.

1) Soluzione "ho tempo e risorse"

Se ne hai abbastanza, la cosa migliore che puoi fare è esportare le tabelle in Excel e far lavorare le persone su di essa per identificare le stesse società nelle 3 tabelle. Fallo semplice, metti persone che sanno eccellere con le persone che ora sono le aziende.

2) Soluzione "non ho tempo di sapere"

Se hai bisogno di iniziare a operare al più presto, dovrai:

  • Basta unire le tabelle con una nuova chiave e conservare quella vecchia.
  • Utilizza un meccanismo come visualizzazioni o qualcosa in modo che le app funzionino immediatamente come prima (con la vecchia chiave).
  • Crea una semplice tabella di ricerca (codice aziendale comune) dove gradualmente consoliderai le aziende.

Altro sull'ultimo punto:

Crea rapporti comuni per tutte le aziende all'inizio . I risultati di questi report avranno la stessa azienda più di una volta, ma descriveranno alla direzione la necessità di impegnare le risorse nel consolidamento.

Spero di averlo reso più chiaro per te ....

    
risposta data 20.04.2012 - 06:51
fonte

Leggi altre domande sui tag