Je crée une table avec des références de clés étrangères. Je m'interroge sur la syntaxe requise. Généralement, j'ai vu ce qui suit (de http://www.sqlite.org/foreignkeys.html#fk_basics ):
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER,
FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
Cependant, sur le même site ( http://www.sqlite.org/foreignkeys.html#fk_actions ) je vois ceci:
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE
);
Cette dernière syntaxe est un peu plus concise, mais je veux savoir si le résultat est en quelque sorte différent (à part le ON UPDATE CASCADE
, ce qui a bien sûr un effet; Je ne l'ai inclus que parce que j'ai copié le code exactement à partir du site référencé et parce que je ne sais pas que la syntaxe ci-dessus ne s'applique pas uniquement lors de la création d'une telle spécification). Je travaille sur Android, au cas où cela compte.
Voir diagrammes de syntaxe .
La première syntaxe est une contrainte de table , tandis que la deuxième syntaxe est une contrainte de colonne . Dans ces exemples, ils se comportent de la même manière.
Vous auriez besoin d'une contrainte de table pour une clé sur plusieurs colonnes (où vous n'avez pas une seule colonne à laquelle vous pouvez la joindre).
Cette réponse n'est peut-être pas liée à la vôtre, mais j'ai pensé qu'elle devrait être utile pour les autres utilisateurs de la base de données Android.
IN SQLite Les contraintes de clé étrangère sont désactivées par défaut (pour une compatibilité descendante). Vous devez l'activer explicitement en utilisant
PRAGMA foreign_keys = 1
après avoir établi votre connexion avec la base de données. Voici le lien vers les documents officiels qui l'expliquent plus en détail. http://sqlite.org/foreignkeys.html Veuillez naviguer pour activer la prise en charge des clés étrangères dans le lien ci-dessus.