Есть две ссылки на базы данных SQLite - PullRequest
0 голосов
/ 18 октября 2018

Я очень плохо знаком с SQL.Я прочитал кучу вопросов о том, как соединить или присоединить две разные базы данных SQLite вместе, но я не нашел успеха, используя любой из описанных методов.Вероятно, проблема связана с моим собственным неправильным пониманием того, как работает SQL, но здесь говорится:

Я хотел бы создать две разные базы данных SQL, одну для пользователей сайта и одну для сообщений, отправляемых между пользователями.

Схема для users db (имя файла: blog_users.sqlite) выглядит следующим образом:

DROP TABLE IF EXISTS user;

CREATE TABLE user (
 id INTEGER PRIMARY KEY AUTOINCREMENT,
 username TEXT UNIQUE NOT NULL,
 password TEXT NOT NULL
);

Схема, которую я придумал для messages db, выглядит следующим образом:

DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS message;

ATTACH DATABASE 'blog_users.sqlite' AS 'users';

CREATE TABLE user (
 id INTEGER PRIMARY KEY AUTOINCREMENT,
 username TEXT UNIQUE NOT NULL
);

CREATE TABLE message (
 id INTEGER PRIMARY KEY AUTOINCREMENT,
 author_id INTEGER NOT NULL,
 created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 title TEXT NOT NULL,
 body TEXT NOT NULL,
 FOREIGN KEY (author_id) REFERENCES users.user (id)
);

Возможность создания сообщения должна быть ограничена требованием идентификатора пользователя, который должен быть извлечен из users дБ, поэтому я попытался использовать FOREIGN KEY.

Может кто-нибудь объяснить, что я делаю неправильно, или указать мне правильное направление?

Заранее спасибо

1 Ответ

0 голосов
/ 18 октября 2018

Насколько я могу судить, ограничения внешнего ключа SQLite не могут быть созданы между таблицами, которые принадлежат разным базам данных.

Хотя, что касается вашей модели данных: вам действительно нужно использовать две базы данных?Почему нельзя использовать таблицу USER, принадлежащую базе данных MESSAGES, как таблицу only USER?Если ничего другого, вы сможете создать ограничение внешнего ключа ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...