Вопрос о модели данных и времени
пример:
торговоля оригинальными запчастями на ауди-фольксваген, прайс - 500.000 позиций, обновление - раз в квартал, цены меняются на все, 20% позиций меняются на новые
реально различных артикулов, которые продаются в течении года - 20.000
в таком случае лучше копировать цену
480.000 записей, которые не связаны с Покупкой можно удалять после квартального обновления цен
Типичная задача для аналитических систем. Называется slowly changing dimension. Использовал оба варианта. Выбор зависит от того, какую задачу надо решить.
вообще у меня не аналитическая система, а обычна OLTP, и не "slowly changing"
Вот тут не понял. Кто тебя заставляет делать foreign key по полю date? Например, можно связать поле id в таблице "price" (primary key) и поле price_id в таблице "покупка" (foreign key).
кстати, очень вероятно, что твой запрос с датами будет прогибать базу при 480.000 записях... ну или не будет прогибать, но будет узким местом...
Вот тут не понял. Кто тебя заставляет делать foreign key по полю date? Например, можно связать поле id в таблице "price" (primary key) и поле price_id в таблице "покупка" (foreign key).это не удобно, вся прелесть этого подхода теряется. Преимущество этого подхода в том, что когда вставляешь запись в таблицу Покупка не надо лезть в таблицу Price, просто устанавливаешь текущее время и все.
кстати, очень вероятно, что твой запрос с датами будет прогибать базу при 480.000 записях... ну или не будет прогибать, но будет узким местом...поле date увеличивает эту таблицу всего на 20.000 записей в год. В этом подходе таблица Price растет вместе с таблицей Покупка.
Оставить комментарий
6yrop
Пусть у нас есть продукты, которые продаются. Цены на продукты меняются со временем.Какая схема базы данных лучше?
1. У нас есть таблица Price, в которой цены периодически обновляются. При покупке цена копируется в таблицу Покупка.
2. Записи в таблице Price не обновляются, добавляются новые с указанием даты.
Наложить Foreign Key между таблицами Price и Покупка нельзя, поскольку Price.[date] это дата ввода цены, а Покупка.[date] это дата покупки.
Запрос для получения цены покупки будет выглядеть как-то так
Если кто сталкивался с такой проблемой, хотелось бы услышать какой подход вы используете и почему?
P.S. в моем случае кроме цены придется копировать еще несколько параметров