第 1 正規形に従うために避けるべきことの 1 つは、グループの繰り返しです。代わりに:
CustID Name Address Phone1 Phone2 Phone3
102 Jerry 234 East.. 555-2342 555-9854 555-2986
2 つ目の電話番号テーブルを作成してから、結合すると次のようになります。
CustID Name Address Phone
102 Jerry 234 East.. 555-2342
102 Jerry 234 East.. 555-9854
102 Jerry 234 East.. 555-2986
場合によっては、もう少しあいまいで、列ヘッダーのグループがいつ修飾されるかを判断するのが難しい場合があります。たとえば、現時点で、すべてのハードウェアで 2 つのテストを実行しているとします。そして、最初の DB 設計では、最も水平的なアプローチが得られます。
デザイン1
SN Test1_Max Test1_Min Test1_Mean Test2_Max Test2_Min Test2_Mean
2093 23 2 15 54 -24 45
明らかに、これは反復グループであり、("Parts" と "Tests" の間の結合で) 次のように簡単に表すことができます。
デザイン 2
SN Test Max Min Mean
2093 1 23 2 15
2093 2 54 -24 45
ただし、さらに垂直に進むこともできます。
デザイン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
設計 3 は必要ですか? どのように垂直にするかをどのように決定しますか? 設計 2 と設計 3 の長所と短所は何ですか? 実際にテーブル構造を変更せずに新しい統計を簡単に追加できるため、設計 3 には利点があり、両方とも SQL で簡単に選択または結合できるようです。
しかし、垂直になればなるほど良いと言う前に、もっとあいまいな場合があります。お気に入り:
デザイン 4
SN AverageCurrent (mA) BatteryCapacity (mA)
2093 200 540
代わりに次のようになります。
デザイン 5
SN mA_Measuremnt Value
2093 AverageCurrent 200
2093 BatteryCapacity 540
両方の属性は同じドメイン (mA) にありますが、コンポーネントに関しては非常に異なるものを表しています。この場合、厳密には繰り返しグループではないため、デザイン 4 の方が優れていますか? 私が探しているのは、それをより多くのテーブルに分割して、より垂直にする時期を知るためのいくつかの基準だと思います。
この途方もなく長い質問を要約すると、繰り返しグループがまったく同じドメインであり、まったく同じ意味を持つ場合にのみ、繰り返しグループを削除して正規化する必要がありますか? . その場合、実際には電話の例と、おそらく設計 1 の 2 つのテストだけがこの基準を満たしています。デザイン 3 とデザイン 5 にはデザイン上の利点があるように見えますが、デザイン 3 の統計は厳密に言えば異なる意味を持ち、AverageCurrent と BatteryCapacity はデザイン 5 では明らかに異なる意味を持ちます。