2013-10-04 22 views
7
Birinin bana SQL anahtar kelimenin amacını açıklamak umuyordum

anahtar sözcüğüREFERANSLAR 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) 
); 

Ben bu kadar bakmaya çalışıyorum çok zaman geçirdim ve ben başlangıçta sınırlamak düşündüm REFERANSLAR powers tablosuna girebileceğiniz veri türü (wizard_id değerine göre) Ancak, farkettiğim herhangi bir kısıtlama olmadan verileri her iki sütuna da ekleyebilirim.

Yani, sorgulama hızını artırmak için sadece REFERANSLAR anahtar kelimesi mi? Onun gerçek amacı nedir?

Teşekkür

cevap

9

Diğer tablosuna bir Foreign Key yaratır. Bu performans avantajları olabilir, ancak yabancı anahtarlar çoğunlukla veri bütünlüğü ile ilgilidir. Bu, (sizin durumunuzda) powers numaralı wizard_id dosyasının wizards tablosundaki id alanında bulunan bir değere sahip olması gerektiği anlamına gelir. Başka bir deyişle, güçler geçerli bir sihirbazdan bahsetmelidir. Birçok veritabanı, bu bilgileri silme veya diğer değişiklikleri yaymak için de kullanır, böylece tablolar senkronize kalır.

Sadece bunu farkettiniz. Anahtar kısıtlamayı atlayabilmenizin bir nedeni, yabancı anahtarların etkinleştirilmemesi olabilir. SQLite3 belgelerinde Enabling foreign keys'a bakın.

+0

teşekkürler tam olarak ne olduğunu. Yabancı anahtar kısıtlamalarını varsayılan olarak bilmiyordu. – JaTo

+0

Bu sizin için çalıştıysa, cevabı kabul etmeyi unutmayın. :) –

+0

Bitti, cevap için teşekkürler! – JaTo