#mysql #sql #database #database-design
#mysql #sql #База данных #база данных-дизайн
Вопрос:
Что вы рекомендуете и почему?
У меня есть несколько таблиц, когда я вношу изменения в данные … они должны перейти в таблицу истории (аудит) с датой вступления в силу.
Другим решением является управление версиями каждого поля для вставки новой строки при внесении изменений в данные?
Какой метод является лучшим для получения информации о счете? Название товара и цена всегда меняются
Ответ №1:
Это медленно изменяющиеся размеры, type 2
и type 4
соответствующим образом.
Оба метода допустимы и могут быть более подходящими для ваших нужд, в зависимости от вашей модели и требований к запросу.
В принципе, type 2
(управление версиями) более подходит, когда вам нужно запрашивать исторические значения так же часто, как и текущее, в то время как type 4
(таблица истории) больше подходит, когда вы чаще запрашиваете текущее значение и есть больше запросов (я имею в виду больше запросов для разработки) к самому последнему значению.
Комментарии:
1. У меня есть order_items для отображения прошлых заказов.. какой из них лучше? Значение названия товара и цены всегда меняется.
2. @user: обычно (обычно) таблица истории лучше, поскольку вам важнее текущая цена и вы выполняете к ней больше запросов. Таким образом, вам не нужно будет добавлять фильтр для
isActive
или аналогичное поле к каждому запросу.3. Вместо ДАТЫ в таблице истории я добавил поле версии. Пример таблиц: item.version, item_history.version и таблица order_table будут содержать номер версии. Таким образом, я получу 100% точную информацию, а не буду ретранслировать при поиске по дате.
Ответ №2:
Система, которую мы используем и которой довольны:
Для каждой таблицы, требующей истории, мы создаем аналогичную таблицу и добавляем поле метки времени в конце, которое становится частью PK.
Каждое обновление исходной таблицы мы вставляем в таблицу истории с теми же условиями:
update table x WHERE somthing something
insert into table x_history
select * from x WHERE something something
Это обеспечивает чистоту ваших данных и стройность таблиц.
Комментарии:
1. В этом решении нет проблем с точностью? Например.. Отображение данных счета из таблицы истории (старые данные).. Я надеюсь, что это показывает правильную цену, лол
2. Почему должна быть проблема? Вы можете использовать управление версиями, но оно требует больше логики / кода, который я считаю ненужным
Ответ №3:
Моим личным предпочтением было бы использовать шаблон Observer в вашем приложении и реализовать отдельную таблицу истории. Это означает, что вы можете извлекать данные из таблицы истории, когда вам это нужно, и вы не ставите под угрозу скорость запроса к основной таблице.