Чтобы придерживаться 1-й нормальной формы, одна из вещей, которую вы должны избегать, - это повторять группы. Вместо:
CustID Name Address Phone1 Phone2 Phone3
102 Jerry 234 East.. 555-2342 555-9854 555-2986
Вы должны создать вторую таблицу телефонных номеров, а затем присоединиться к соединению, которое вы получили:
CustID Name Address Phone
102 Jerry 234 East.. 555-2342
102 Jerry 234 East.. 555-9854
102 Jerry 234 East.. 555-2986
Иногда, это немного более неоднозначно, и трудно сказать, когда группа заголовков столбцов квалифицируется. Например, скажем, у вас есть на данный момент два теста, которые вы запускаете на каждом аппаратном обеспечении. И ваш первый дизайн БД дает наиболее горизонтальный подход:
Конструкция 1
SN Test1_Max Test1_Min Test1_Mean Test2_Max Test2_Min Test2_Mean
2093 23 2 15 54 -24 45
Очевидно, что это повторяющаяся группа, которую можно было бы гораздо легче представить (на стыке между "частями" и "испытаниями" ):
Конструкция 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? Как вы решаете, как вертикально это сделать? Каковы плюсы и минусы между Design 2 и 3? Кажется, что оба могут быть легко выбраны или объединены с SQL, с преимуществом, указанным в Design 3, потому что вы можете легко добавить новую статистику без фактической модификации структуры таблицы.
Но прежде чем кто-нибудь пойдёт и скажет, что чем вертикальнее, тем лучше, бывают времена, когда она более двусмысленная. Как:
Конструкция 4
SN AverageCurrent (mA) BatteryCapacity (mA)
2093 200 540
Вместо этого может быть:
Конструкция 5
SN mA_Measuremnt Value
2093 AverageCurrent 200
2093 BatteryCapacity 540
Хотя оба атрибута имеют один и тот же домен (мА), они представляют собой очень разные вещи в отношении компонента. В этом случае, дизайн 4 лучше, поскольку он не является строго повторяющейся группой? Я предполагаю, что я ищу некоторые критерии, чтобы знать, когда разбить его на несколько таблиц и тем самым сделать его более вертикальным.
Подводя итог этому смехотворно длинному вопросу, следует ли удалять и нормализовать повторяющиеся группы, если они то же самое, что и тот же домен и имеют то же значение?. Если это так, то действительно только пример телефона и, вероятно, два теста в Design 1 соответствуют этим критериям. Хотя кажется, что дизайн 3 и 5 может иметь конструктивные преимущества, даже если статистика Design 3 имеет разные значения строго говоря, а AverageCurrent и BatteryCapacity определенно имеют разные значения в Design 5.