Очень простой способ, который мы использовали для отслеживания таких изменений, таков:
users_history`
userid
changenumber smallint not null
changedate datetime not null
changeaddr varchar(32) not null
phone NULL,
address NULL
primary key on (userid, linenumber)
Каждый раз, когда вы ВСТАВЛЯЕТЕ или ОБНОВЛЯЕТЕ запись в таблице users
, просто ВСТАВЛЯЙТЕ новую запись в таблице users_history. changenumber
начинается с 1 и увеличивается оттуда. changedate
и changeaddr
могут использоваться для отслеживания, когда и где.
Если значение поля не изменилось, не стесняйтесь указывать NULL в соответствующем users_history
поле таблицы.
В конце концов, вашему приложению не нужно изменять или хранить громоздкие исторические данные в таблице users
, но у вас есть все, если оно у вас под рукой.
Edit:
Это сохраняет старые данные. См. Следующий пример, где пользователь начал с заданного адреса и телефона, а затем через 4 дня обновил адрес, а через 5 дней обновил телефон. У вас есть все.
Запись текущих пользователей:
100 | 234-567-8901 | 123 Sesame Street
Таблица истории образцов
100 | 1 | 2009-10-01 12:00 | 123-456-7890 | 555 Johnson Street
100 | 2 | 2009-10-05 13:00 | NULL | 123 Sesame Street
100 | 3 | 2009-10-10 15:00 | 234-567-8901 | NULL