Просто чтобы убедиться, что я правильно истолковал ваш вопрос:
В настоящее время у вас есть таблица с полями
username, email, firstname, middlename, familyname, dob, password, country
и вы хотите сохранить историю для колонок имени и фамилии. Это правильно?
Если это так, я бы порекомендовал добавить столбцы достоверности времени в вашу таблицу (valid_from, valid_until) и вставлять новые строки для каждого изменения, устанавливая "valid_from" для текущей записи в now (), а valid_until в null. Вы также установите для столбца valid_until последней строки для этого пользователя значение now ().
Текущая запись - это та, где valid_until равен нулю.
Этот дизайн является самоописанием, хотя было бы лучше, если бы вы сохранили изменения для всех полей в таблице, а не только для имен и фамилий. Это также позволяет хранить историю паролей.
Таблица будет выглядеть примерно так:
id
username
email
firstname
middlename
familyname
dob
password
country
valid_from
valid_until
Например:
id username email firstname familyname ... valid_from valid_until
-----------------------------------------------------------------------------------------------------
1 bob bob@b.com Bob Smith 1/Jan/2011 null
Когда Боб меняет свою фамилию, это становится
id username email firstname familyname ... valid_from valid_until
-----------------------------------------------------------------------------------------------------
1 bob bob@b.com Bob Smith 1/Jan/2011 1/Aug/2011
1 bob bob@b.com Bob Brown 1/Aug/2011 null