web-dev-qa-db-ja.com

SQLiteデータベースブラウザーで外部キーを作成する

初心者の質問で申し訳ありません。

SQLiteデータベースブラウザを使用してテーブルを作成しましたが、次のとおりです。

  1. アプリケーションを使用して外部キーを指定する方法はわかりませんか?

  2. テーブル間の関係図を作成するにはどうすればよいですか?

35
Jeff

私はこの質問がずっと前に聞かれたことを知っていますが、私はそれを見つけました。 GUIに組み込まれています。 [外部キー]タブ用のスペースを確保するには、[名前]タブと[タイプ]タブをドラッグして少し小さくするだけです。マウスポインターを最後に置き、ヘッダーをドラッグします。

SQLite Browserの私のバージョンはバージョン3.7.0です。

enter image description here

60
Chintan Desai

「データベース構造」タブを使用して外部キー制約を定義する方法が見つかりませんでした。グラフィカルエディターを使用して構築するのではなく、スクリプトを使用してテーブル定義と制約を定義することを強くお勧めします。これにより、新しいデータベースの作成とスキーマの変更の追跡がはるかに簡単になります。

例として、2つのテーブルがあると仮定します。1つはファイル名を定義し、もう1つは圧縮に使用する方法を指定し、定義時にfile_definitionテーブルに外部キー制約を追加できます。

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)
);

ただし、デフォルトでは、SQLiteは制約を強制しません。したがって、データベースに接続するたびに、次のコマンドを発行して制約チェックを有効にする必要があります。

PRAGMA foreign_keys = ON;

詳細は ドキュメント にあります。

テーブルが既に存在し、完全なスクリプトを構築したくない場合は、運が悪くなります。SQLiteは、テーブルが生成されると外部キーの追加をサポートしません。こちらを参照してください: SQLiteが実装しないSQL機能

13
phil_rawlings

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!
);  
_

そして最後に:

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

SQLite環境のDBブラウザ(v 3.8.0-Sqlite v 3.9.2)で、PK、AIおよびその他の列とともにtrackテーブルのDBフィールドを追加すると、外部キー列を見つけることができます。

そこで、この例では、trackartist行にartist(artistid)を追加します。
次に、外部キー制約が作成されます。

DBブラウザの[テーブル定義の編集]ウィンドウで、外部キーの空白領域をダブルクリックすると、テキストボックスがアクティブになります。そこで外部キーを追加できます。

2
Odb718

テーブル定義の編集ウィンドウに移動

[フィールドを追加]をクリックします

タイプに名前を付けてください:整数

右にスクロールして、外部キー列を見つけます

新しい行の外部キー列の下をダブルクリックします

マスターテーブルとそのIDフィールドを選択します

OKをクリック

[変更を書き込む]をクリックします

ここに画像の説明を入力

0
mammadkoma

SQLite3のトリガーは、外部キー制約を強制します。リンク https://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers は、最初の質問の解決に役立ちます。

0
SKN