DB Design: 1ère forme normale et groupes répétitifs

À adhérer à la 1ère forme normale, l'une des choses que vous devez éviter, c'est de répéter les groupes. Comme, au lieu de:

    CustID  Name  Address       Phone1      Phone2       Phone3

     102    Jerry  234 East..   555-2342   555-9854     555-2986

Vous devez créer un deuxième Numéro de Téléphone, table et ensuite sur une jointure, vous obtenez:

CustID  Name     Address       Phone

102 Jerry    234 East..   555-2342
102 Jerry    234 East..   555-9854
102 Jerry    234 East..   555-2986

Parfois, c'est un peu plus ambigu et il est difficile de dire quand un groupe d'en-têtes de colonne qualifier. Par exemple, disons que vous avez, à l'heure actuelle, deux tests à exécuter sur chaque pièce de matériel. Et votre première DB design les rendements de la plupart approche horizontale:

1

SN     Test1_Max   Test1_Min    Test1_Mean  Test2_Max   Test2_Min    Test2_Mean
2093      23          2            15         54          -24           45  

Évidemment, c'est une répétition du groupe, qui pourrait beaucoup plus facilement être représenté comme (sur une jointure entre les "Parties" et "Tests"):

2

SN     Test      Max    Min    Mean     
2093    1        23     2      15       
2093    2        54     -24     45      

Cependant, vous pourrait aller encore plus à la verticale:

3

SN     Test    Statistic    Value
2093    1        Max          23
2093    1        Min          2
2093    1        Mean         15       
2093    2        Max          54
2093    2        Min         -24
2093    2        Mean         45  

Est de Conception 3-elle nécessaire? Comment voulez-vous décider de la manière verticale pour le faire? Quels sont les avantages et les inconvénients entre le Design 2 et 3? Il semble que les deux peuvent être sélectionnés ou rejoint facilement avec SQL, avec l'avantage donné à la Conception 3 car vous pouvez facilement ajouter une nouvelle Statistique sans réellement modifier la structure de la table.

Mais avant tout va et dit que la verticale de la meilleure, il y a des moments où c'est plus ambigu. Comme:

4

SN      AverageCurrent (mA)    BatteryCapacity (mA)  
2093          200                    540  

Pourraient plutôt être:

5

SN      mA_Measuremnt       Value
2093    AverageCurrent      200 
2093    BatteryCapacity     540 

Tandis que les deux attributs sont du même domaine (mA), ils représentent des choses très différentes en ce qui concerne le composant. Dans ce cas, le Design est 4 mieux depuis qu'il n'est pas strictement une répétition de groupe? Je crois que je suis à la recherche de certains critères à savoir quand le décomposer en plusieurs tables et ainsi le rendre plus à la verticale.

Pour résumer cette ridiculement longue question, si vous ne retirez et de normaliser la répétition de groupes s'ils sont exactement le même domaine et ont le même sens?. Si c'est le cas, alors, vraiment, que le numéro de l'exemple et probablement les deux tests dans la Conception 1 correspondent à ce critère. Bien qu'il semble comme il pourrait être la conception des prestations de Conception 3 et 5, même si les statistiques de la Conception 3 ont des significations différentes, à strictement parler, et AverageCurrent et BatteryCapacity certainement avoir des significations différentes dans la Conception 5.

source d'informationauteur