Должен ли я отделять избыточные данные в своей базе данных?

#database #schema #redundancy

#База данных #схема #избыточность

Вопрос:

У меня есть приложение базы данных, в котором хранятся цены на товары в разных местах. С каждой ценой связаны следующие данные:

  • Цена
  • Дата
  • идентификатор продукта
  • Страна
  • тип цены (заводская /оптовая /розничная торговля)

Последние три элемента (pID, country, pricetype) можно рассматривать как один составной элемент, описывающий назначение цены; в этих данных много избыточности. Поэтому я думаю: разделите их в отдельную таблицу, чтобы сэкономить место и упростить запросы.

 Normal:
Prices (price_id, price, date, product_id, country_id, pricetype_id)

vs:
Prices (price_id, price, date, descriptor_id)
Descriptors (descriptor_id, product_id, country_id, pricetype_id)
  

Стоит ли это дополнительных усилий по программированию? Будет ли он более или менее расширяемым / поддерживаемым в долгосрочной перспективе?

Ответ №1:

Стоит ли это дополнительных усилий по программированию?

ДА

Будет ли она более или менее расширяемой / поддерживаемой в долгосрочной перспективе?

Более расширяемый и простой в обслуживании.

В общем
Вы всегда должны нормализовать как минимум до 3NF.

Смотрите эту статью: http://databases.about.com/od/specificproducts/a/normalization.htm

Ответ №2:

Это зависит от объема данных, которые вы ожидаете в этой таблице. Если у вас нет проблем с производительностью / хранилищем, вам не нужны отдельные таблицы (по соображениям производительности).

С другой стороны, вы получите все недостатки, связанные с избыточностью. Вы должны проверить свои данные на наличие несоответствий и т. Д.

Но: независимо от выбранного вами дизайна, еще есть время изменить путь, по которому вы идете.

Комментарии:

1. «еще есть время изменить путь, по которому вы идете» > Какой ценой? Если у вас есть живое приложение с миллионами записей, вы дважды подумаете, прежде чем менять «путь, по которому вы идете»