Como alguns comentários já disseram, uma solução é usar uma nova chave primária
Por exemplo (seguindo o exemplo de @onedaywhen), digamos que exista a tabela Livros que armazenam uma lista de livros e "usamos" para determinar o ISBN como a chave primária. No entanto, alguns autores cometeram o erro de digitar um ISBN errado e, portanto, solicitaram a alteração do ISBN, envolvendo as próximas tarefas:
- crie um novo registro na tabela Livros
- aponte todas as referências do ISBN antigo para o novo ISBN. (*)
- E, finalmente, exclua o registro antigo da tabela Livros.
(*) isso pode ser trivial para encontrar todas as referências para um modelo de banco de dados que use chaves estrangeiras, mas alguns modelos não possuem.
Table Books
ISBN is the primary key
NAME is a simple field.
etc.
Nós mudamos isso como
Table Books
InternalBookId as the primary key
ISBN as a simple field or an indexed field.
NAME is a simple field.
etc.
Onde o novo InternalBookId poderia até ser um valor autonumérico.
Os contras sobre isso:
ele adiciona um novo campo que usa mais espaço / recurso.
isso poderia exigir a reescrita de todo o modelo.
o novo modelo poderia ser menos auto-explicado.
O profissional
- Permite alterar a "chave primária".
- Permite até mesmo soltar ou refatorar a "chave primária", por exemplo, alterar Livros para ISBN-13 é tão simples que soltar a coluna mais antiga e criar uma nova
Nova tabela:
Table Books
InternalBookId as the primary key
ISBN13 is a new field.
NAME is a simple field.
etc.