У меня дилемма. Я работаю с большим количеством устаревшего кода и вижу много избыточной информации в структурах таблиц. Преимущественно они существуют в двух формах:
A. Избыточная информация для экономии на «присоединениях». например:
event_id, event_name, event_creator_id
3 test1 43
subevent_id, event_id, event_creator_id
21 3 43
Обратите внимание на дублирование event_creator_id. Обоснование, данное бывшими «старшими» разработчиками, состоит в том, что, когда нам нужен идентификатор создателя события, мы просто должны запросить одну таблицу, а не выполнять «дорогостоящее» соединение для получения значения.
Б. Избыточная информация для экономии на расчетах. например:
event_id, event_default_price
3 100
discount_id, discount_code, discount_percentage
7, ABCD, 50
special_event_id, event_id, discount_id, discounted_price
21 3 7, 50
Обратите внимание, что вместо расчета окончательной «discounted_price» для этого особого события (потому что ссылка на Discount_id уже существует), код сохраняет это «рассчитанное» значение, как здесь. Опять же, оправдание - «скорость», нормальный выстрел к черту.
У меня два вопроса:
- Я могу сказать новым разработчикам, что эти структуры не нормализованы, но они могут сказать, что это быстрее. Как мне противостоять этому? Могу ли я противостоять этому? Другие так структурируют свои базы данных ?!
- Есть ли эмпирическое правило или набор принципов, которые я могу использовать, чтобы сказать: «О, это будет медленнее, но только на 1%, так что можно делать это этим способом» , и т.д?
event_name
ключ в родительской таблице? - person Branko Dimitrijevic   schedule 06.07.2012