Come "sistemare" un Database fatto male...

giovedì 06 settembre 2007 - 09.24

paolosavona Profilo | Newbie

.
Buongiorno a tutti.

So fin d'ora che il mio quesito e' really dumb,
ma non me ne vogliate, bisogna pur cominciare.

Ho cercato in letteratura,
ma non sono riuscito a trovarne la risposta.

Ho ereditato un database assai mal fatto,
non lo si puo' neppure chiamare DB:
anagrafiche ripetute, chiavi primarie mancanti...

E' grosso, quindi re-input-arlo e' un casino.

Sto estraendomi io le varie anagrafiche con SELECT DISTINCT e simili,
e questo va bene, c'e' un po' da impazzire con le stringhe non uniformi, ma vabbe'.

Il problema ora e',
nell'enorme tabellona "transazioni",
dove invece della chiave primaria utente si ripete tutte le volte il nome utente,
come faccio a sostituire questi nomi con la relativa chiave?

Grazie, saluti.

Paolo

giangi_77 Profilo | Newbie

Ciao Paolo,
ho dovuto affrontare anche io un problema simile e la mia soluzione è stata quella di armarmi di buona volontà e di iniziare a creare join su join per creare "tabelle" con i dati corretti. Ovviamente poi ho salvato tutto nel mio nuovo db bello pulito.
Non conosco il tuo livello di conoscenza di Sql, ma facendo qualcosa del tipo:

Tabella anagrafica nuova (T1)
idutente, nomeUtente

Tabella pasticciona vecchia (T2)

nomeUtente, campo2, campo3, campo4,...

Query:
SELECT T1.idUtente, T2.campo2, T2.campo3,... FROM T1 LEFT OUTER JOIN T2 ON T1.nomeUtente = T2.nomeUtente
Il risultato lo inserisci nella tua nuova tabella.
Per verificare che i dati siano corretti potresti visualizzare anche il campo nomeUtente delle due
tabelle.
Vedi tu se usare una LEFT o una RIGHT OUTER JOIN a seconda di che informazioni vuoi privilegiare...se decidere di considerare più importanti quelli della T1 o della T2.
spero di aver colto in pieno il tuo problema e averti aiutato a risolverlo.
In caso contrario chiedi pure.
ciao

giangi_77

paolosavona Profilo | Newbie

Ciao Giangi.

Mi sa che e' proprio il tipo di soluzione che serve a me,
provo subito a metterla in atto.

Non mi e' chiarissimo cosa implichi privilegiare, un database,
una tabella "transazioni" come la mia rispetto alla tabella "anagrafica" che ora vado a creare.
Hanno funzioni differenti, nel mio DB, ovviamente,
ma a nasocredo che il mio nucleo informativo stia nelle transazioni.


Ma intanto, at work, una cosa per volta...

Grazie, per ora!

giangi_77 Profilo | Newbie

eheheh
scusa, ma il mio italiano a volte è incomprensibile...
per privilegiare intendo dire che facendo una join c'è il rischio di non recuperare tutti i record di entrambe
le tabelle dato che potrebbero non esserci tutte le relazioni tra le due.
Allora usando una left o una right preferisci visualizzare tutti i record di una delle due mettendo a null gli eventuali campi della seconda tabella affinchè comunque hai i dati che ritieni più utili e importanti per il tuo scopo.
Immagino che a te interessi recuperare i dati delle trasazioni e se eventualmente qualche id anagrafica risultasse nullo sarà tuo compito correggere i dati mancanti.
spero sia un po' più chiaro ora.
ciao
giangi_77

paolosavona Profilo | Newbie

Ciao Giangi.

Ricordi il suggerimento che mi avevi dato sul database fatto male da ricostruire?

Ebbene, solo ora sono riuscito a dedicarmici, e la tua dritta e' stata assolutamente preziosa!

Sono a buon punto, ma mi trovo con un problemino sul quale ti chiedo ancora aiuto.

Nella tabellona incasinata, gli utenti si trovano sia in colonna 2 che in colonna 4 ( a volte speditori a volte ricevitori, e tutti possono avere entrambi i ruoli).

Come estrarresti in un botto solo, cosi' stando le cose, l'anagrafica completa? Io in prima release ho estratto tutti quelli della 2, poi tutti quelli della quattro, li ho accodati, ho eliminato i doppi... 'na palla .
Se ora me ne entrano di nuovi devo rifarmi tutta la trafila o quasi. Vedi una query per un'operazione unica?

E infine, in una query posso inserire un doppio RIGHT JOINT, immagino, che punti due volte alla stessa anagrafica, ma che separatore va messo fra l'uno e l'altro: punto, virgola, puntevvirgola... Perche' ovviamente la nuova tabella pulita deve avere UtenteID sia in colonna 2 che in colonna 4!

Grazie, anche solo se mi hai letto fino in fondo.

Se poi mi rispondi anche, ti mando i dati per la fattura...(smile)

Paolo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5