2013-10-04 7 views
7

Ich hatte gehofft, jemand mir den Zweck des SQL-Schlüsselwort LITERATUR viel Zeit erklären könnte versuchen, dies zu sehen BEZUG Stichwort in 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) 
); 

Ich habe verbrachte

und ich dachte zunächst, dass es einschränken würde die Art der Daten, die Sie in die Powers-Tabelle eingeben können (abhängig davon, ob die Wizard-ID vorhanden ist). Ich kann jedoch immer noch Daten in beide Spalten einfügen, ohne irgendwelche Einschränkungen, die ich bemerkt habe.

Also, ist das Stichwort REFERENZEN nur für die Erhöhung der Abfragegeschwindigkeit? Was ist der wahre Zweck?

Dank

Antwort

9

Es hat eine Foreign Key auf die andere Tabelle erstellt. Dies kann Leistungsvorteile haben, aber bei Fremdschlüsseln geht es hauptsächlich um die Datenintegrität. Dies bedeutet, dass (in Ihrem Fall) das wizard_id Feld von powers einen Wert haben muss, der im Feld id der Tabelle vorhanden ist. Mit anderen Worten, Potenzen müssen sich auf einen gültigen Wizard beziehen. Viele Datenbanken verwenden diese Informationen auch zum Weiterleiten von Löschungen oder anderen Änderungen, damit die Tabellen synchron bleiben.

Das ist mir gerade aufgefallen. Ein Grund, warum Sie die Schlüsseleinschränkung umgehen können, ist möglicherweise, dass Fremdschlüssel nicht aktiviert sind. Siehe Enabling foreign keys in der SQLite3-Dokumentation.

+0

danke das ist genau das, was es ist. Die Fremdschlüsseleinschränkung war standardmäßig deaktiviert. – JaTo

+0

Wenn das für Sie funktioniert, vergessen Sie nicht, die Antwort zu akzeptieren. :) –

+0

Fertig, danke für die Antwort! – JaTo