2010-12-09 43 views
0

J'ai une table qui a environ 40 colonnes. La seule différence dans les noms des colonnes est que les 20 derniers commencent tous par "B" avant le nom de la colonne. Cette table est utilisée pour comparer. En d'autres termes, comparez les données des 20 premières colonnes aux données des 20 dernières colonnes.Comment concevoir une table avec deux ensembles de noms de colonnes presque dupliqués?

Je sais que c'est une très mauvaise conception, alors comment cette table devrait être repensée, de sorte qu'il n'y a que 20 colonnes, mais nous pouvons encore comparer les données?

EDIT: si elle aide, nous utilisons ces données pour trouver une cohorte appariée

Notez également que la performance est la principale préoccupation ici. En dupliquant les colonnes, l'obtention des données est extrêmement rapide.

Merci!

+0

Je ne comprends pas - vous devez savoir que les données sont liées à insérer correctement? Alors, que fait cette deuxième série de colonnes? Cela ressemble à un cas pour une union ou une jointure avec une seule colonne référençant la clé primaire d'une autre rangée, mais je ne suis pas sûr que je comprenne votre cas de manière définitive à dire. – Yishai

+0

Vous avez raison, la procédure stockée qui est exécutée pour produire et ensuite insérer cette table identifie correctement la cohorte appariée (releated) avant d'insérer les données. –

Répondre

1

Deux architectures possibles et un conseil de requête.

1) Construire votre table avec une colonne "Type", et l'utiliser pour marquer "primaire" vs "alternatif". Dans votre cas, "A" contre "B" pourrait être approprié.

2) Construire une partition verticale, deux tables identiques (pour les données primaires et alternatives), partageant une clé primaire commune. (Si Id = 42 est dans une table, elle doit être dans l'autre - à moins que les données «alternatives» soient facultatives, auquel cas ne remplissent pas la seconde table.) Également optionnellement, avoir une troisième table qui suit tous les primaires possibles clés, ainsi que toutes les données connues pour être communes aux deux tables. Conseil: Lisez jusqu'à SELECT ... SAUF et SELECT ... INTERSECT. Ils fonctionnent rapidement et sont une idée pour comparer toutes les colonnes et les lignes entre deux ensembles de données pour les différences (sauf) et les correspondances (intersection). Vous pouvez l'utiliser assez facilement avec l'une ou l'autre des deux structures, et cela fonctionnerait également avec votre code existant (bien qu'il soit plus difficile d'écrire la requête).