2010-06-11 31 views
8

Aşağıdaki yabancı anahtar kısıtlaması (iyi uygulanmasına rağmen) neden SQLite tarafından uygulanmıyor? İlişkiyi güçlendirmek için nasıl gidebilirim?Yabancı anahtar uygulanmadı

Assuming the library is compiled with foreign key constraints enabled, it must still be enabled by the application at runtime, using the PRAGMA foreign_keys command. For example:

sqlite> PRAGMA foreign_keys = ON;

Foreign key constraints are disabled by default (for backwards compatibility), so must be enabled separately for each database connection separately.

alakalı bağlantılı olarak PRAGMA olduğunu kullandınız mı: the relevant docs gibi

CREATE TABLE User (
    UserID TEXT Unique NOT NULL PRIMARY KEY, 
    FirstName TEXT NOT NULL, 
    LastName TEXT NOT NULL, 
    Username TEXT NOT NULL, 
    Password TEXT NOT NULL, 
    Email TEXT NOT NULL, 
    SignupDate TEXT NOT NULL 
) 

CREATE TABLE Category (
    CategoryID TEXT Unique NOT NULL PRIMARY KEY, 
    UserID TEXT, 
    FOREIGN KEY(UserID) REFERENCES User(UserID) 
) 

cevap

12

(Yabancı anahtar Desteği etkinleştirme bölümünde 2.) demek? (Belgelerin belirttiği gibi, sqlite'ın uygun şekilde derlendiği ve ayrıca yabancı anahtar kısıtlama uygulamalarını sunmak için son zamanlarda yeterli bir versiyon olduğu varsayılmaktadır). Ayrıca connectionstring gömme yoluyla yabancı anahtar desteği açabilir

+0

istemi yanıt için çok teşekkür ederim. Belgelerdeki (bir dahaki sefere daha sert görünecek) farketmedim. Sadece bu komutu çalıştırmayı denedim şu hatayı alıyorum: "SQLite prepare() başarısız oldu. HATA: yetkilendirme reddedildi DETAYLAR: yetkilendirilmemiş EXPRESSION: PRAGMA foreign_keys = ON;" Kullandıkları sürümün desteklemediği veya işlevselliğin devre dışı bırakıldığı varsayılıyor. Tetikleyicileri kullanarak aynı sonuç sonucunu oluşturabilir miyim? Öyleyse, lütfen SQLITE için bazı örnek tetikleyici sözdizimi verin? –

+0

@Maxim, Ben sqlite yabancı anahtar tetikleyicileri tam olarak eski eski anahtarlar (aynı zamanda tam ilişkisel ACID gücü sunmak istediğinizden daha küçük ve hızlı olmak isteyen sqlite gömülü yapılarında kaldırılır) gibi temel işlevselliği tam olarak gerektirir inanıyorum önemli performans ve ayak izi maliyetleri). –

3

:

foreign keys=True 

Örnek:

"Data Source={DatabaseFullFilePath};Version=3;foreign keys=True;datetimeformat=CurrentCulture"