#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. «еще есть время изменить путь, по которому вы идете» > Какой ценой? Если у вас есть живое приложение с миллионами записей, вы дважды подумаете, прежде чем менять «путь, по которому вы идете»