Au fil des flows

19jan/120

SQLite et le support des clefs etrangeres

Posted by Fabien Arcellier

SQLite est un moteur de base de donnée très léger. Cette solution offre des possibilités différentes des solutions comme PostGreSQL, mySQL ou MSSql. Elle est directement intégrée à votre programme et n'utilise pas de processus séparé. L'intéret c'est que vous pouvez l'utiliser aussi simplement qu'un fichier en profitant de la puissance du langage SQL.

En ayant conçu mon shéma de base de donnée au départ, j'avais configuré les clefs étrangères et la liaison entre les différentes tables. Je m'attendai à ce que par défaut SQLite s'occupe de ces contraintes.

Le scénario que j'attendai est le suivant :

  • Si l'utilisateur supprime une ville, alors tous les immeubles et leurs appartements de cette ville sont supprimés
  • Si l'utilisateur supprime un immeuble, alors je veux supprimer tous les appartements de cet immeuble

Surprise lors des tests, ça ne se comportait pas du tout comme ça. Pourtant les règles de suppression étaient bien présentes dans le fichier de création de la base.

PRAGMA foreign_key

Par défaut, les clefs étrangères ne sont pas utilisés par sqlite. Il n'en tiendra pas compte. Lors de votre connexion, avant toute autre requête, vous devez exécuter la requête suivante :

PRAGMA foreign_keys = ON;

Je n'ai pas trouvé de moyen de les activer par défaut en permanence. Vous devez le faire à chaque connexion.

Pour ceux qui utilise le provider ADO.Net pour utiliser la base de donnée, vous pouvez le configurer dans votre chaine de connexion la commande suivante : foreign keys=true;.

Remplis sous: Non classé Aucun commentaire