web-dev-qa-db-fra.com

Créer une clé étrangère dans le navigateur de base de données SQLite

Désolé pour la question de novice.

J'ai créé mes tables en utilisant Navigateur de base de données SQLite , mais:

  1. Je ne sais pas comment puis-je spécifier mes clés étrangères à l'aide de l'application?

  2. Comment créer un diagramme de relation entre les tables?

33
Kamyar Parastesh

Je sais que cette question a été posée il y a longtemps mais je l'ai trouvée. Son construit directement dans l'interface graphique. Il vous suffit de faire glisser et de rendre ces onglets Nom, Type un peu plus petits pour faire de la place pour l'onglet Clé étrangère. Placez le pointeur de votre souris à la fin et faites glisser l'en-tête.

Ma version de SQLite Browser est la version 3.7.0.

 enter image description here

49
Chintan Desai

Je ne pouvais pas trouver un moyen de définir des contraintes de clé étrangère en utilisant l'onglet "Structure de la base de données". Il est vivement recommandé de définir les définitions de table et les contraintes à l'aide d'un script plutôt que de les créer à l'aide de l'éditeur graphique. Il est ainsi beaucoup plus facile de créer de nouvelles bases de données et de suivre les modifications apportées au schéma. 

A titre d'exemple, supposons que nous ayons deux tables: une définissant les noms de fichier et l'autre spécifiant la méthode utilisée pour la compression, nous pouvons ajouter une contrainte de clé étrangère à la table définition_fichier lors de la définition.

CREATE TABLE [compression_state] (
    [compression_state_id] INTEGER  PRIMARY KEY NOT NULL,
    [value] TEXT  NOT NULL
);

CREATE TABLE [file_definition] (
    [file_id] INTEGER  NOT NULL  PRIMARY KEY AUTOINCREMENT,
    [compression_state_id] INTEGER  NOT NULL,
    [name] TEXT NOT NULL,
    FOREIGN KEY(compression_state_id) REFERENCES compression_state(compression_state_id)
);

Cependant, par défaut, SQLite n'applique pas la contrainte. Par conséquent, chaque fois que vous vous connectez à la base de données, vous devez exécuter la commande suivante pour activer le contrôle de contrainte.

PRAGMA foreign_keys = ON;

Plus de détails dans la documentation .

Si les tables existent déjà et que vous ne souhaitez pas créer de script complet, aucune chance, SQLite ne prend pas en charge l'ajout de clés étrangères une fois la table générée, voir ici: Fonctionnalités SQL non prises en charge par SQLite Mettre en place

13
phil_rawlings

De la documentation SQLite:

CREATE TABLE artist(
  artistid    INTEGER PRIMARY KEY, 
  artistname  TEXT
);
CREATE TABLE track(
  trackid     INTEGER,
  trackname   TEXT, 
  trackartist INTEGER     -- Must map to an artist.artistid!
);  

et à la fin :

CREATE TABLE track(
  trackid     INTEGER, 
  trackname   TEXT, 
  trackartist INTEGER,
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);

Dans le navigateur de base de données pour environnement SQLite (v 3.8.0 - Sqlite v 3.9.2), lorsque vous ajoutez les champs de base de données pour la table track avec Les colonnes PK, AI et autres, vous pouvez trouver une colonne de clé étrangère. 

Dans cet exemple, vous ajoutez simplement artist(artistid) dans la ligne trackartist.
Ensuite, la contrainte de clé étrangère est créée.

6

Dans le navigateur de base de données, dans la fenêtre Modifier la définition de la table, vous pouvez double-cliquer sur la zone vide de la clé étrangère et une zone de texte s'active. Vous pouvez y ajouter votre clé étrangère. 

1
Odb718

Aller à la fenêtre de définition de la table

Cliquez sur le champ Ajouter

Nommez-le avec Type: Entier

Faites défiler à droite et trouver la colonne Forein Key

Double-cliquez sous la colonne Clé étrangère dans la nouvelle ligne.

Sélectionnez la table principale et son champ d'identification

Cliquez sur OK

Cliquez sur Ecrire les modifications

entrez la description de l'image ici

0
mammadkoma

Les déclencheurs dans SQLite3 appliquent les contraintes de clé étrangère. Link https://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers vous aiderait à résoudre votre première question.

0
SKN