Внешний ключ не применяется - PullRequest
13 голосов
/ 11 июня 2010

Почему следующее ограничение внешнего ключа (хотя и выполняется нормально) не применяется SQLite?Как я могу обеспечить соблюдение отношений?

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)
)

Ответы [ 2 ]

16 голосов
/ 11 июня 2010

Как соответствующие документы скажем (в разделе 2. Включение поддержки внешнего ключа ):

Предполагается, что библиотека скомпилирована с ограничения внешнего ключа включены, это должен быть включен приложение во время выполнения, используя Команда PRAGMA foreign_keys. За Пример:

sqlite> PRAGMA foreign_keys = ON;

Ограничения внешнего ключа отключены по умолчанию (для задом наперед совместимость), поэтому должен быть включен отдельно для каждой базы данных подключение отдельно.

Использовали ли вы это PRAGMA в соответствующем соединении? (Предполагается, как утверждают документы, что sqlite скомпилирован надлежащим образом, а также, конечно, достаточно недавняя версия, чтобы предлагать принудительное применение ограничений внешнего ключа).

4 голосов
/ 15 февраля 2017

Вы также можете включить поддержку внешнего ключа путем встраивания в строку подключения:

foreign keys=True

Пример:

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