Oracle
 sql >> база данни >  >> RDS >> Oracle

Можем ли да актуализираме стойностите на първичния ключ на таблица?

Общоприето е, че първичните ключове трябва да бъдат неизменни (или възможно най-стабилни, тъй като неизменимостта не може да бъде наложена в DB). Въпреки че няма нищо, което да ви попречи да актуализирате първичен ключ (с изключение на ограничението за целостта), това може да не е добра идея:

От гледна точка на производителността:

  • Ще трябва да актуализирате всички външни ключове, които препращат към актуализирания ключ. Една актуализация може да доведе до актуализиране на потенциално много таблици/редове.
  • Ако външните ключове са неиндексирани (!!), ще трябва да поддържате заключване на дъщерната таблица, за да гарантирате целостта. Oracle ще задържи ключалката само за кратко време, но все пак това е страшно.
  • Ако външните ви ключове са индексирани (както трябва да бъдат), актуализацията ще доведе до актуализиране на индекса (изтриване+вмъкване в структурата на индекса), това обикновено е по-скъпо от действителната актуализация на основната таблица.
  • В таблиците ORGANIZATION INDEX (в други RDBMS, вижте клъстериран първичен ключ), редовете са физически сортирани по първичния ключ. Логическата актуализация ще доведе до физическо изтриване+вмъкване (по-скъпо)

Други съображения:

  • Ако този ключ е посочен във външна система (кеш на приложението, друга DB, експортиране...), препратката ще бъде прекъсната при актуализиране.
  • в допълнение, някои RDBMS не поддържат CASCADE UPDATE, по-специално Oracle.

В заключение, по време на проектирането обикновено е по-безопасно да се използва сурогатен ключ вместо естествен първичен ключ, за който се предполага, че не се променя – но в крайна сметка може да се наложи да бъде актуализиран поради променени изисквания или дори грешка при въвеждане на данни.

Ако абсолютно трябва да актуализирате първичен ключ с дъщерна таблица, вижте тази публикация от Tom Kyte за решение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Списък с NLS параметри в базата данни на Oracle

  2. KGXGN грешка при анкетиране (15)

  3. Как да промените символа на валутата на вашата сесия в Oracle

  4. Разлика между времеви печати в милисекунди в Oracle

  5. Как да клонирате потребител в Oracle