Come dovrebbe un tavolo con due set di nomi di colonna quasi duplicati essere progettato?
-
25-09-2019 - |
Domanda
Ho una tabella che ha circa 40 colonne. L'unica differenza nei nomi colonne è che l'ultimo 20 iniziano tutti con "B" prima del nome della colonna. Questa tabella viene utilizzata per il confronto. In altre parole, confrontare i dati nei primi 20 colonne per i dati degli ultimi 20 colonne.
So che questo è molto cattiva progettazione, così come si deve questa tabella essere riprogettato, in modo che ci sono solo 20 colonne, ma possiamo ancora confrontare i dati?
EDIT: se aiuta, usiamo anche questi dati per trovare una corrispondenza di coorte
Si noti inoltre che le prestazioni è di preoccupazione principale qui. Duplicando le colonne della ottenere dei dati è estremamente veloce.
Grazie!
Soluzione
Due possibili architetture e una punta di query.
1) Costruisci la tua tabella con una colonna "Type", e l'uso che per la bandiera "primario" vs "alternate". Nel tuo caso, "A" vs "B" potrebbe essere appropriata.
2) Costruire una partizione verticale, due tabelle identiche (per i dati primari e si alternano), che condividono una chiave primaria comune. (Se Id = 42 è in una tabella, deve essere nell'altro - meno dati "alternate" è opzionale, nel qual caso non popolano la seconda tabella.) Inoltre opzionalmente, hanno una terza tabella che tutte le tracce possibili primaria chiavi, insieme con i dati che si caratterizza per essere sempre comune ad entrambe le tabelle.
Suggerimento: leggere su SELEZIONA ... tranne e SELECT ... intersecano. Corrono preoccupante in fretta, e sono idea per il confronto di tutte le colonne e le righe tra i due set di dati per le differenze (tranne) e partite (Intersezione). È possibile utilizzare questo abbastanza facilmente con una delle due strutture, e sarebbe lavorare con il codice esistente, come pure (anche se potrebbe essere fussier di scrivere la query).