skanuj0314 (2)

skanuj0314 (2)



Rozdział 11. ♦ Więcej o SQL 329

Korzystanie z kluczy obcych wiąże się niestety z kilkoma ograniczeniami:

♦    Obie tabele, czyli tabela, z której następuje odwołanie, i tabela, do której następuje odwołanie, muszą być typu InnoDB. Dla pozostałych typów tabel instrukcje związane z kluczami obcymi są przyjmowane i nie generują błędu, ale nie mają one znaczenia praktycznego. Według zapowiedzi, w przyszłych wersjach serwera obsługa kluczy obcych zostanie dodana także dla innych rodzajów tabel, w pierwszej kolejności do tabel typu MylSAM.

♦    W tabeli, z której następuje odwołanie, wszystkie kolumny tworzące klucz obcy muszą być zawarte w indeksie. W naszym przykładzie chodzi o indeks dla kolumny Autorld w tabeli Książki. Jeśli taki indeks nie będzie obecny, począwszy od wersji 4.1.2 zostanie utworzony automatycznie. W wersjach przed 4.1.2 próba utworzenia klucza obcego bez istniejącego indeksu zakończy się niepowodzeniem.

♦    W tabeli, do której następuje odwołanie, musi istnieć indeks dla kolumn będących kluczem obcym. W naszym przykładzie musi istnieć indeks dla kolumny Id w tabeli Autorzy. Jeśli taki indeks nie będzie obecny, począwszy od wersji 4.1.2 zostanie utworzony automatycznie. W wersjach przed 4.1.2 próba utworzenia klucza obcego bez istniejącego indeksu zakończy się niepowodzeniem.

♦    Powiązane kolumny w obu tabelach powinny mieć podobny, a jeszcze lepiej taki sam, typ danych, tak aby nie zachodziła konieczność dokonywania przez serwer wewnętrznych konwersji typów.

♦    Sprawdzanie zależności związanych z kluczami obcymi powoduje zmniejszenie wydajności serwera. Przy tworzeniu projektu warto rozważyć, czy i dla których tabel taka funkcjonalność jest faktycznie niezbędna.

Dodawanie i usuwanie ograniczeń w istniejących tabelach

Ograniczenia związane z kluczami obcymi nie muszą być nakładane już w trakcie tworzenia tabel. Istnieje możliwość ich późniejszego dodania, za pomocą znanej nam już instrukcji ALTER TABLE. W takim wypadku jej schematyczna postać będzie wyglądała następująco:

ALTER TABLE nazwa_tabeli

ADD [CONSTRAINT nazwał

FOREIGN KEY (kolumnal. kolumna2.....kolumnaN)

REFRENCES nazwa_tabeli Ckolumnal, koluma2.....kolumnaN)

Została ona podzielona na cztery wiersze w celu zwiększenia czytelności, choć może być również w całości zapisana jednym ciągiem. Jeśli zatem w bazie utworzymy tabele Autorzy i Książki za pomocą instrukcji CREATE w postaci:

CREATE TABLE Książki(

Id INTEGER PRIMARY KEY,

Autorld INTEGER.

Tytuł VARCHAR(45)


Wyszukiwarka

Podobne podstrony:
skanuj0297 (3) Rozdział 11. ♦ Więcej o SQL 311 Rozdział 11. ♦ Więcej o SQL 311 mysql> select tytu
skanuj0299 (2) Rozdział 11. ♦ Więcej o SQL 313 Rozdział 11. ♦ Więcej o SQL 313 mysql> SELECT tytu
skanuj0303 (2) Rozdział 11. ♦ Więcej o SQL 317 Której funkcji należy użyć, aby dowiedzieć się, jaka
skanuj0305 (3) Rozdział 11. ♦ Więcej o SQL 319 SELECT Klientld. MIN(Wartosc) AS MIN. MAX(Wartosc) AS
skanuj0310 (2) Rozdział 11. ♦ Więcej o SQL 325 W przypadku już istniejącej tabeli jej typ może zosta
skanuj0318 (2) Rozdział 11. ♦ Więcej o SQL 333
skanuj0301 (2) Rozdział 11. ♦ Więcej o SQL 315 Tabela 11.1. Funkcje

więcej podobnych podstron