Como algunos comentarios ya lo dijeron, una solución es usar una nueva clave primaria
Por ejemplo (siguiendo el ejemplo de @onedaywhen), digamos que existe la tabla Libros que almacena una lista de libros y que "usamos" para determinar el ISBN como clave principal. Sin embargo, algunos autores cometieron el error de escribir un ISBN incorrecto, por lo que solicitaron cambiar el ISBN, que implicaba las siguientes tareas:
- crear un nuevo registro en la tabla Libros
- señale todas las referencias del antiguo ISBN al nuevo ISBN. (*)
- Y finalmente, elimine el registro anterior de la tabla Libros.
(*) esto podría ser trivial para encontrar todas las referencias para un modelo de base de datos que usa claves externas pero algunos modelos carecen de él.
Table Books
ISBN is the primary key
NAME is a simple field.
etc.
Lo cambiamos como
Table Books
InternalBookId as the primary key
ISBN as a simple field or an indexed field.
NAME is a simple field.
etc.
Donde el nuevo InternalBookId podría incluso ser un valor autonumérico.
Los contras al respecto:
agrega un nuevo campo que usa más espacio / recurso.
podría requerir reescribir todo el modelo.
El nuevo modelo podría explicarse menos por sí mismo.
El PRO
- Permite mutar la "clave primaria".
- Permite incluso descartar o refactorizar la "clave principal", por ejemplo, cambiar Libros a ISBN-13 es tan simple como descartar la columna anterior y crear una nueva
Nueva mesa:
Table Books
InternalBookId as the primary key
ISBN13 is a new field.
NAME is a simple field.
etc.