Я работаю над проектом, когда я ударил дизайнерскую дилемму, поскольку я считаю, что это довольно распространенная ситуация. Пожалуйста, дайте мне знать, как вы справляетесь с этим. Предположим, что мы создаем веб-приложение для магазина. Существует таблица каталогов с количеством строк, например.Изменение справочных данных и сохранение «истории»
ID | имя | Цена
- | Игрушечный автомобиль | 10 $
- | Плюшевый медведь | 2 $
И таблица заказов с платежными средствами. Как хранить данные о деталях заказа, то есть продукт, купленный? Основная проблема заключается в том, как обрабатывать изменения в таблице каталогов, такие как изменение цены.
Solutions Я придумал это:
есть таблица order_details со структурой, похожую на каталог и много-к-одному отношения со столом заказов. Когда пользователь покупает sth, необходимые данные копируются в таблицу order_details из таблицы каталогов. Для этого требуется большое хранилище при копировании всех (или хотя бы некоторых) столбцов, а в случае изменения столбца в таблице каталогов необходимо распространять изменения в order_detals.
Другая идея - использовать механизм медленно изменяющихся размеров (от хранилища данных). Таблица каталогов требует дополнительных столбцов, таких как:
ID | имя | цена | версия
| Игрушечный автомобиль | 10 $ | 1
| Плюшевый медведь | 2 $ | 1
| Плюшевый медведь | 4 $ | 2
И таблица order_details со многими отношениями к таблице заказов и отношением «много-к-одному» с таблицей каталогов. В этом случае в таблице order_details содержится столько же строк, сколько меньше столбцов. Кон этим подходом является необходимость управления версиями продуктов.
дубликаты: http://softwareengineering.stackexchange.com/questions/258234/best-approach-for-an-online-store-which-changes-its-product-s-price-over-time; http://stackoverflow.com/questions/3469803/how-to-handle-price-fluctuations-in-an-invoice-application; http://stackoverflow.com/questions/11818965/how-to-properly-relate-items-to-pricing-data-taking-price-change-history-into-a – jaco0646
Вы правы. Я искал sth, как это, когда дело доходит до вопросов дизайна, иногда трудно задавать «правильный вопрос» –