Як вже говорили деякі коментарі, одне рішення - використовувати новий первинний ключ
Наприклад (за прикладом @onedaywhen), скажімо, що існує таблиця " Книги", в якій зберігається список книг, і ми "використовувались" для визначення ISBN в якості основного ключа. Однак деякі автори допустили помилку введення неправильного ISBN, тому вони попросили змінити ISBN, він передбачав наступні завдання:
- створити новий реєстр у таблиці Книги
- вкажіть усі посилання від старого ISBN до нового ISBN. (*)
- І нарешті, видаліть старий реєстр із таблиці Книги.
(*) це може бути тривіально для пошуку всіх посилань на модель бази даних, яка використовує Foreign Keys, але в деяких моделях її відсутні.
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.