Come alcuni commenti hanno già detto, una soluzione è usare una nuova chiave primaria
Ad esempio (seguendo l'esempio di @onedaywhen), supponiamo che esista la tabella Libri che memorizza un elenco di libri e che abbiamo "utilizzato" per determinare il codice ISBN come chiave primaria. Tuttavia, alcuni autori hanno commesso l'errore di digitare un codice ISBN errato, quindi hanno chiesto di modificare il codice ISBN, coinvolgendo le seguenti attività:
- crea un nuovo registro nella tabella Libri
- punta tutti i riferimenti dal vecchio codice ISBN al nuovo codice ISBN. (*)
- Infine, elimina il vecchio registro dalla tabella Libri.
(*) questo potrebbe essere banale per trovare tutti i riferimenti per un modello di database che usa chiavi esterne ma alcuni modelli ne mancano.
Table Books
ISBN is the primary key
NAME is a simple field.
etc.
Lo cambiamo come
Table Books
InternalBookId as the primary key
ISBN as a simple field or an indexed field.
NAME is a simple field.
etc.
Dove il nuovo InternalBookId potrebbe anche essere un valore autonumerico.
Gli aspetti negativi:
-
aggiunge un nuovo campo che utilizza più spazio / risorse.
-
potrebbe richiedere la riscrittura dell'intero modello.
-
il nuovo modello potrebbe essere meno spiegato da solo.
Il professionista
- Permette di mutare la "chiave primaria".
- Permette anche di eliminare o refactoring della "chiave primaria", ad esempio, per cambiare libri in ISBN-13 è così semplice da eliminare la colonna precedente e crearne una nuova
Nuova tabella:
Table Books
InternalBookId as the primary key
ISBN13 is a new field.
NAME is a simple field.
etc.