Как реализовать построчное управление версиями, используя mysql + java?

Допустим, для примера у нас есть таблица с именем student (sID является первичным ключом, isValid=1 означает, что строка действительна, а 0 на данный момент недействительна)

sId    sName   gpa   isValid 
1      Tom      3.0    1
2      Hanks    3.5    1  

теперь давайте предположим, что я обновил значения Тома. но все же я хочу сохранить предыдущие значения.

sId    sName   gpa   isValid 
1      Tom      3.0    0
2      Hanks    3.5    1 
1      Tom      3.6    1

Теперь в значениях Томса произошли изменения. его предыдущие значения не удалены навсегда.

Как я могу реализовать это есть плагин или что-то? Проблема в том, что первичный ключ встречается более одного раза.

2 ответа

Вам нужно изменить дизайн базы данных.

Держать в sId,sName и любое другое поле (если требуется) в student таблица, которая будет родительской таблицей. Создайте другую таблицу как student_academic с sId в качестве внешнего ключа студенческого стола вместе с gpa, isvalid поля.

Для каждого студента значения изменений вставьте новую запись перевода. Это также обеспечивает базу данных Normalization и выполнит вашу потребность.

Я не чувствую необходимости в каком-либо плагине здесь, я бы сделал что-то вроде этого:

  1. Сделайте свой sID автоинкремент
  2. Для каждой вставки получите последнюю версию (sId - 1) и отметьте ее как isValid = 0

Я полагаю, вы используете JDBC

Другие вопросы по тегам