Oracle SQL - Constraints - więzy - klucze

Klucze można włączać w czterech różnych trybach. Aby zacząć z nimi zabawę najpierw stwórzymy sobie jeden przykładowy

alter table abc
create constraint abc_fk1 forein key (id) references abd(id);
-- lub 
create constraint abc_pk1 primary key (id);
alter table abc disable constraint abc_fk1;

Teraz można zabrać się za włączanie tego klucza. Najprostszym sposobem jest

alter table abc enable constraint abc_fk1;

Niestety, na bazie transakcyjnej tak często zmieniane są dane, że prawdopodobnie już po krótkim czasie okaże się, że włączenie klucza jest niemożliwe ze względu na niespójne dane. Wtedy należy korzystać z opcji dodatkowych (np w ramach tymczasowych zabezpieczeń)

enable validate
enable novalidate
disable validate
disable novalidate

W trybie pierwszym czyli enable validate więz jest włączony można powiedzieć standardowo czyli jest włączony a przed jego włączenie następuje walidacja poprawności. Jeśli wszystko się powiedzie sytuacja jest co najmniej OK.

W trybie enable novalidate więz zostanie włączony bez wcześniejszej walidacji - pozwala to na włączenie klucza na niespójnych danych. Po co? A no dlatego, że klucz ten nie pozwoli w przyszłości na dodanie zepsutych/niespójnych danych. Klucz może być więc włączany w takim trybie na okres przejściowy zanim administrator nie uspójni danych w tabelach powiązanych

disable novalidate to w zasadzie synonim słowa disable - klucz wyłączony

ciekawą opcją jest możliwość ustawienia klucza w stan disable validate daje ona możniwość zablokowania edycji tabeli. Klucz zostanie wyłączony ale walidacja musi się odbywać w związku z czym, żadna operacja nie może być zweryfikowana jako poprawna i wszystkie są domyślnie odrzucane.

Przykłady

alter table abc enable validate constraint abc_fk1;
alter table abc enable novalidate constraint abc_fk1;

Data ostatniej modyfikacji wpisu: 2010.03.06 20:58:21.