Это не вопрос о конкретной технической проблеме, а более общий вопрос о дизайне базы данных. Тем не менее, технический стек таков: ASP.NET MVC, SQL DB.
Недавно я унаследовал систему, в которой есть концепция «Заказ» -> «Элемент заказа» -> «Продукт», т. Е. В заказе много элементов заказа, и каждый элемент заказа связан с одним продуктом.
Элемент заказа сохраняет следующее при сохранении в БД:
- Номер заказа
- Код товара
- Кол-во
- Стоимость единицы (написано из продукта)
- Итого NET (рассчитано на основе Кол-во * Стоимость единицы)
- НДС
- Всего БРУТТО
Элемент заказа, просматриваемый через пользовательский интерфейс, выглядит следующим образом:
Qty | ProdCode | ProdDescription | Unit Cost | Total NET | VAT | Total Gross
Количество, стоимость единицы продукции и итоговые суммы вводятся в пользовательский интерфейс из элемента заказа, а код продукта и описание продукта извлекаются из соответствующей записи о продукте.
Все кажется достаточно разумным.
Итак, мой вопрос вращается вокруг того, какие данные должны быть записаны из продукта, а какие данные должны быть ссылками из продукта. В частности, стоимость единицы записывается из продукта, когда создается элемент заказа. Я предполагаю, что это связано с изменением цен на товары, и вы не хотите, чтобы это изменение применялось к старым заказам. Хорошо, имеет смысл.
Мой вопрос: должна ли та же логика применяться к коду продукта и описанию продукта? И если нет, то почему?
На мой взгляд, похоже, что код продукта и описание также должны быть записаны в элемент заказа, т. е. код продукта и описание могут измениться так же, как и стоимость единицы продукта. В этом случае, если вы вернетесь и посмотрите на старый заказ, код продукта и описание в заказе будут отличаться от того, что было изначально заказано, что мне кажется неправильным.
Разработчик, создавший систему, больше не может обсуждать свои мысли при ее проектировании.
Система работает нормально, нареканий нет. Однако это в основном потому, что никогда не было никаких обновлений кодов/описаний продуктов, хотя они доступны для редактирования для различных пользователей.
Мне было бы интересно услышать мнение людей по этому поводу, прежде чем я начну вносить массовые изменения, является ли это распространенным сценарием, и я ни о чем не беспокоюсь?