2009-11-07 7 views
2

Je suis en train de développer un site qui enregistrera des données dans une base de données SQL qui décrit des événements. L'un des événements stockés dans la base de données comporte plusieurs variantes. Certaines de ces variations sont assez rares et j'essaie de limiter le nombre de champs vides dans les enregistrements. Je discute entre ces deux styles:Base de données SQL, tables multiples partageant l'index principal

option A:

report_primary_key 
. 
. 
. 
standard_info 
. 
.(17 fields) 
. 
uncommon_values (8 fields) 

ou B:

report_primary_key 
. 
. 
. 
standard_info 
. 
.(17 fields) 

deuxième table

report_primary_key 
uncommon_values (3 fields) 

Option A aurait toutes les informations possibles stockées dans la table unique mais 95% des enregistrements auraient 10+ valeurs nulles (sur 25). L'option B aurait une version rognée de la table principale. Étant donné que la table supplémentaire utiliserait la même clé primaire, il suffirait de rechercher dans les tables supplémentaires jusqu'à trois occurrences de cette clé à inclure dans la sortie.

Alors, ça me laisse avec mes questions. La requête supplémentaire vaut-elle la peine d'économiser de l'espace dans la table? D'autres pensées quant à l'une d'entre elles étant une meilleure idée que l'autre?

Merci pour l'aide/avis.

Répondre

3

En règle générale, si vous avez des événements «inhabituels» qui se produisent plutôt rarement, par ex. moins de 5% ou 10% du temps, alors je mettrais certainement ces champs supplémentaires dans une table séparée.

Le design est plus propre pour le boîtier 90-95% sans tous ces champs vides, et le peu de temps nécessaire pour créer une table supplémentaire avec une clé primaire supplémentaire est négligeable.

+0

génial, merci de confirmer cela pour moi. Je suis encore nouveau à ce sujet et je ne voulais pas faire quelque chose de totalement stupide en essayant d'économiser sur l'espace et autres. – baiano

+0

Et juste pour confirmer, il n'y aura pas de problème si la table supplémentaire utilise les mêmes valeurs dans sa clé primaire que la table principale? – baiano

+0

Non, pas de problème - c'est une clé primaire totalement séparée sur la deuxième table2, donc ceux-ci n'interfèrent pas les uns avec les autres. –

0

Deux tables - il s'agit d'un exemple "standard" de relation supertype/sous-type. Voir aussi this question: et the matching model (image). Dans votre exemple, vous avez un REPORT et un SPECIAL_REPORT qui est un type de rapport.

Questions connexes