Как уже говорилось в некоторых комментариях, одним из решений является использование нового первичного ключа
Например (следуя примеру @onedaywhen), предположим, что существует таблица Books которой хранится список книг, и мы «использовали» ее для определения ISBN в качестве первичного ключа. Однако некоторые авторы допустили ошибку, набрав неправильный ISBN, поэтому они попросили изменить ISBN, это включало следующие задачи:
- создать новый реестр в таблице Книги
- Укажите все ссылки со старого ISBN на новый ISBN. (*)
- И наконец, удалите старый реестр из таблицы Книги.
(*) это может быть тривиально найти все ссылки на модель базы данных, которая использует внешние ключи, но в некоторых моделях ее нет.
Table Books
ISBN is the primary key
NAME is a simple field.
etc.
Мы меняем это как
Table Books
InternalBookId as the primary key
ISBN as a simple field or an indexed field.
NAME is a simple field.
etc.
Где новый InternalBookId может быть даже числовым значением.
Минусы по этому поводу:
это добавляет новое поле, которое использует больше места / ресурса.
это может потребовать переписать всю модель.
новая модель может быть менее самообъяснимой.
Про
- Позволяет мутировать «первичный ключ».
- Позволяет даже отбросить или изменить рефакторинг «первичного ключа», например, изменить Книги на ISBN-13 так просто, как удалить старый столбец и создать новый.
Новая таблица:
Table Books
InternalBookId as the primary key
ISBN13 is a new field.
NAME is a simple field.
etc.