Klauzula CONSTRAINT

ograniczenie jest podobne do indeks, chociaż może również służyć do ustanowienia relacja z inną tabelą.

Za pomocą klauzuli CONSTRAINT w instrukcjach ALTER TABLE i CREATE TABLE można tworzyć i usuwać ograniczenia. Istnieją dwa typy klauzul CONSTRAINT: jeden z nich pozwala utworzyć ograniczenie dla jednego pola, a drugi — dla większej liczby pól.

Uwaga : Aparat bazy danych programu Microsoft Access nie obsługuje stosowania instrukcji CONSTRAINT ani żadnych innych instrukcji Data Definition Language (DDL) z bazami danych innymi niż bazy programu Microsoft Access. Zamiast nich należy używać metod Create obiektów Data Access Objects (DAO).

Składnia

Ograniczenie dotyczące jednego pola:

CONSTRAINT nazwa {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES tabela_obca [(pole_tabeli_obcej1, pole_tabeli_obcej2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Ograniczenie dotyczące wielu pól:

CONSTRAINT nazwa
{PRIMARY KEY (klucz_podstawowy1[, klucz_podstawowy2 [, ...]]) |
UNIQUE (klucz_unikatowy1[, klucz_unikatowy2 [, ...]]) |
NOT NULL (pole_niepuste1[, pole_niepuste2 [, ...]]) |
FOREIGN KEY [NO INDEX] (odwołanie1[, odwołanie2 [, ...]]) REFERENCES tabela_obca [(pole_tabeli_obcej1 [, pole_tabeli_obcej2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Klauzula CONSTRAINT zawiera następujące segmenty:

Segment

Opis

nazwa

Nazwa ograniczenia, które ma zostać utworzone.

klucz_podstawowy1, klucz_podstawowy2

Nazwa pola lub pól, które mają pełnić rolę klucz podstawowy.

klucz_unikatowy1, klucz_unikatowy2

Nazwa pola lub pól, które mają pełnić rolę klucza unikatowego.

pole_niepuste1, pole_niepuste2

Nazwa pola lub pól, które mogą zawierać wyłącznie wartości inne niż Null.

odwołanie1, odwołanie2

Nazwa pola lub pól pełniących rolę klucz obcy, które odwołują się do pola lub pól w innej tabeli.

tabela_obca

Nazwa tabela obca zawierającej pole lub pola określone parametrem pole_tabeli_obcej.

pole_tabeli_obcej1, pole_tabeli_obcej2

Nazwa pola lub pól w tabeli_obcej opisanej parametrami odwołanie1 i odwołanie2. Tę klauzulę można pominąć, jeśli pole, do którego prowadzi odwołanie, jest kluczem podstawowym tabeli_obcej.


Spostrzeżenia

Składnia ograniczenia dotycząca jednego pola w klauzuli definicji pola w instrukcji ALTER TABLE lub CREATE TABLE powinna być umieszczana natychmiast po specyfikacji typu danych pola.

Składni ograniczenia dotyczącego wielu pól należy używać zawsze w przypadku użycia klauzuli CONSTRAINT zawierającej słowo zastrzeżone poza klauzulą definicji pola w instrukcji ALTER TABLE lub CREATE TABLE.

Za pomocą klauzuli CONSTRAINT można przypisywać polom następujące typy ograniczeń:

  • Przy użyciu słowa zastrzeżonego UNIQUE można nadać polu status klucza unikatowego. Oznacza to, że żadne dwa rekordy w tabeli nie mogą mieć wartości takiej, jak podana w tym polu. Ograniczenie unikatowości można zdefiniować dla dowolnego pola lub listy pól. Jeśli klucz unikatowy zostanie ustawiony dla wielu pól, połączone wartości wszystkich pól ujętych w indeksie muszą być unikatowe, nawet jeśli dwa lub więcej rekordów mają taką samą wartość, jak wartość znajdująca się nawet w jednym z pól.

  • Za pomocą słów zastrzeżonych PRIMARY KEY polu lub polom w tabeli można nadać status klucza podstawowego. Wszystkie wartości w kluczu podstawowym muszą być unikatowe i nie mogą mieć wartości Null. W tabeli może istnieć tylko jeden klucz podstawowy.

    Uwaga : Nie należy ustawiać ograniczenia PRIMARY KEY dla tabeli, która już zawiera klucz podstawowy, ponieważ spowoduje to wystąpienie błędu.

  • Za pomocą wyrazów zastrzeżonych FOREIGN KEY można nadać polu status klucza obcego. Jeśli klucz podstawowy tabeli obcej składa się więcej niż z jednego pola, należy użyć definicji ograniczenia dotyczącego wielu pól, podając wszystkie odwołujące się pola, nazwę tabeli obcej oraz nazwy pól tabeli obcej, do których prowadzą odwołania, w takiej samej kolejności, w jakiej są wymienione odwołujące się pola. Jeśli pole lub pola, do których prowadzą odwołania, są kluczem podstawowym tabeli obcej, nie trzeba podawać tych pól. Domyślnie aparat bazy danych zakłada, że klucz podstawowy tabeli obcej to pola, do których prowadzi odwołanie.

    Ograniczenia klucza obcego określają konkretne działania, jakie należy podjąć w przypadku zmiany wartości odpowiedniego klucza podstawowego:

  • Działania, jakie mają zostać wykonane na tabeli obcej, można określić na podstawie odpowiednich akcji wykonanych na kluczu podstawowym w tabeli, w której jest zdefiniowana klauzula CONSTRAINT. Załóżmy na przykład, że tabela Klienci została zbudowana w następujący sposób:

CREATE TABLE Klienci (IDklienta INTEGER PRIMARY KEY, PKstatnazwa NCHAR VARYING (50))

Przyjmijmy również, że tabela Zamówienia, która określa relację klucza obcego polegającą na odwołaniu do klucza podstawowego tabeli Klienci, została utworzona przy następujących parametrach:

CREATE TABLE Zamówienia (IDzamówienia INTEGER PRIMARY KEY, IDklienta INTEGER, Uwagidozam NCHAR VARYING (255), CONSTRAINT KOzamIDklienta FOREIGN KEY (IDklienta) REFERENCES Klienci ON UPDATE CASCADE ON DELETE CASCADE

Zarówno klauzula ON UPDATE CASCADE, jak i ON DELETE CASCADE są zdefiniowane w kluczu obcym. Klauzula ON UPDATE CASCADE oznacza, że aktualizacja identyfikatora klienta (IDklienta) w tabeli Klienci zostanie rozpowszechniona w całej tabeli Zamówienia. Każde zamówienie z odpowiednią wartością identyfikatora klienta zostanie automatycznie zaktualizowane o nową wartość. Klauzula ON DELETE CASCADE oznacza, że usunięcie klienta z tabeli Klienci spowoduje usunięcie z tabeli Zamówienia wszystkich wierszy zawierających ten sam identyfikator klienta.

Rozważmy poniższą konstrukcję tabeli Zamówienia, w której akcja CASCADE została zastąpiona akcją SET NULL:

CREATE TABLE Zamówienia (IDzamówienia INTEGER PRIMARY KEY, IDklienta INTEGER, Uwagidozam NCHAR VARYING (255), CONSTRAINT KOzamIDklienta FOREIGN KEY (IDklienta) REFERENCES Klienci ON UPDATE SET NULL ON DELETE SET NULL

Klauzula ON UPDATE SET NULL oznacza, że aktualizacja identyfikatora klienta (IDklienta) w tabeli Klienci spowoduje automatyczne ustawienie wartości NULL dla odpowiednich pozycji klucza obcego w tabeli Zamówienia. Analogicznie klauzula ON DELETE SET NULL oznacza, że usunięcie klienta z tabeli Klienci spowoduje ustawienie wartości NULL dla wszystkich odpowiednich kluczy obcych w tabeli Zamówienia.

Aby zapobiec automatycznemu tworzeniu indeksów dla kluczy obcych, można użyć modyfikatora NO INDEX. Z tej formy definiowania klucza obcego należy korzystać tylko w przypadkach, gdy powstające wartości indeksów mają być często duplikowane. Tam, gdzie dochodzi do częstego duplikowania wartości indeksów kluczy obcych, stosowanie indeksów może być mniej skuteczne niż zwykłe przeszukiwanie tabeli. Utrzymywanie tego rodzaju indeksu, przy wstawianiu i usuwaniu wierszy z tabeli, spowalnia pracę i nie zapewnia żadnych korzyści.



Czy te informacje były pomocne?

Doskonale! Czy chcesz przesłać inne opinie?

Jak możemy to poprawić?

Dziękujemy za opinię!

×