2013-10-04 18 views
7

Miałem nadzieję, ktoś mógłby mi wyjaśnić cel hasła SQL REFERENCJELITERATURA słów kluczowych w SQLite3

CREATE TABLE wizards(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name TEXT, 
    age INTEGER 
, color TEXT); 

CREATE TABLE powers(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name STRING, 
    damage INTEGER, 
    wizard_id INTEGER REFERENCES wizards(id) 
); 

Spędziłem dużo czasu próbując wyglądać to i ja początkowo myślałem, że to ograniczyć typ danych, które można wprowadzić do tabeli uprawnień (na podstawie tego, czy identyfikator_w kreatorze) Jednak nadal mogę wstawiać dane do obu kolumn bez żadnych ograniczeń, które zauważyłem.

Czy zatem słowo kluczowe ODNIESIENIA służy tylko zwiększeniu szybkości wyszukiwania? Jaki jest jego prawdziwy cel?

Dzięki

Odpowiedz

9

tworzy on Foreign Key do drugiej tabeli. Może to przynieść korzyści wydajnościowe, ale klucze obce dotyczą głównie integralności danych. Oznacza to, że (w twoim przypadku) pole wizard_id złożone z powers musi mieć wartość, która istnieje w polu id tabeli wizards. Innymi słowy, uprawnienia muszą odnosić się do prawidłowego kreatora. Wiele baz danych również wykorzystuje te informacje do propagowania usunięć lub innych zmian, więc tabele pozostają zsynchronizowane.

Właśnie to zauważyłem. Powodem, że można obejść ograniczenie klucza, może być to, że klucze obce nie są włączone. Zobacz Enabling foreign keys w dokumentacji SQLite3.

+0

dzięki, że jest dokładnie tym, czym jest. Nie wiedziałem, że ograniczenie obcego klucza jest domyślnie wyłączone. – JaTo

+0

Jeśli to zadziałało, nie zapomnij przyjąć odpowiedzi. :) –

+0

Zrobione, dziękuję za odpowiedź! – JaTo

Powiązane problemy