SQL: Czy można modyfikować/updejtować wartości w kolumnie klucza głównego (primary key)?
Generalnie dobrze jest projektować tabele tak, aby klucz główny był stały i nie było potrzeby zmieniać go kiedykolwiek. Życie pisze jednak różne scenariusze, więc odpowiedź na to pytanie brzmi:
Jeśli nie narusza to żadnych więzów integralności (integrity constraints), to tak, można. Trzeba mieć jednak na uwadze co najmniej kilka rzeczy:
- Klucz główny, który chcemy modyfikować, może być kluczem obcym (foreign key) w innych tabelach. Dla zachowania spójności danych, te kolumny również będą musiały zostać odpowiednio zmodyfikowane. Niektóre bazy danych oferują opcję “ON UPDATE CASCADE”, ale nawet wtedy, trzeba upewnić się, że faktycznie została ona włączona dla każdego klucza obcego związanego z naszym kluczem głównym.
- W słabo zaprojektowanych bazach danych, mogą występować sytuacje, gdzie teoretycznie w jakiejś kolumnie przechowujemy dane, które tym kluczem obcym odnoszącym się do naszego klucza głównego powinny być, ale z jakiegoś powodu nie są – ten constraint nie został po prostu stworzony, np. ktoś nie wiedział, że trzeba i ktoś inny nie sprawdził na review albo ktoś się spieszył i zapomniał. Istnieje tego typu ryzyko i niestety trzeba mieć to na uwadze.
- Przy dużych bazach danych z wieloma indeksami taka operacja może być bardzo czasochłonna.
- Zdarza się, że klucz główny w naszej bazie danych, jest powiązany w jakiś sposób z zewnętrznym systemem. Wtedy jego nieprzemyślana modyfikacja, może złamać całą integralność tych dwóch systemów.