SQLite, как связать сущности без внешних ключей? - PullRequest
0 голосов
/ 27 сентября 2011

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

Может ли кто-нибудь показать простой пример с двумя таблицами? Спасибо.

Простой пример: как выбрать все треки одного исполнителя?

CREATE TABLE artist(
  artistid    INTEGER PRIMARY KEY, 
  artistname  TEXT
);

CREATE TABLE track(
  trackid     INTEGER, 
  trackname   TEXT, 
  trackartist INTEGER
);

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

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

SELECT a.*, t.* FROM artist a INNER JOIN track t ON a.artistid = t.trackartist;

(вместо a.*, t.* подставляются нужные столбцы).

Вы можете сделать это, не заявляя, что trackartist является внешним ключом для исполнителя (artistid). Если вы сделаете это объявление, разница в том, что SQLite гарантирует, что вы никогда не поместите в trackartist значение, которое не является допустимым artistid, и что вы никогда не измените или не удалите artistid, который используется в trackartist.

Внешние ключи - это механизм для поддержания целостности ассоциации между таблицами, но вы можете «создать» любую ассоциацию, какую захотите, в операторе SELECT независимо от любых первичных или внешних ключей, объявленных в базе данных.

1 голос
/ 27 сентября 2011

Если вы не укажете внешний ключ, значит, внешний ключ отсутствует.

SELECT t.trackname, t.trackid
  FROM track t
 INNER JOIN artist a
    ON a.artistid = t.trackartist
 WHERE a.artistname = 'Alex'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...