初心者の質問で申し訳ありません。
SQLiteデータベースブラウザを使用してテーブルを作成しましたが、次のとおりです。
アプリケーションを使用して外部キーを指定する方法はわかりませんか?
テーブル間の関係図を作成するにはどうすればよいですか?
「データベース構造」タブを使用して外部キー制約を定義する方法が見つかりませんでした。グラフィカルエディターを使用して構築するのではなく、スクリプトを使用してテーブル定義と制約を定義することを強くお勧めします。これにより、新しいデータベースの作成とスキーマの変更の追跡がはるかに簡単になります。
例として、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機能
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ブラウザの[テーブル定義の編集]ウィンドウで、外部キーの空白領域をダブルクリックすると、テキストボックスがアクティブになります。そこで外部キーを追加できます。
テーブル定義の編集ウィンドウに移動
[フィールドを追加]をクリックします
タイプに名前を付けてください:整数
右にスクロールして、外部キー列を見つけます
新しい行の外部キー列の下をダブルクリックします
マスターテーブルとそのIDフィールドを選択します
OKをクリック
[変更を書き込む]をクリックします
SQLite3のトリガーは、外部キー制約を強制します。リンク https://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers は、最初の質問の解決に役立ちます。