新しいバージョンの SQLiteは外部キー制約をサポートしています。定義することが可能です
CREATE TABLE MASTER (_ID INTEGER PRIMARY KEY, ...);
CREATE TABLE SERVANT (_ID INTEGER PRIMARY KEY, MASTERID INTEGER,
FOREIGN KEY(MASTERID) REFERENCES MASTER(_ID);
ドキュメントによると、デフォルトでは「NO ACTION」が ON DELETE および ON UPDATE に使用されます。しかし、他の DBS とは逆に「NO ACTION」は、削除または更新が実行されないという意味ではないようです。少なくとも私のテスト(*)によれば、完全性を維持するために何も行われていないことを意味しているようです。
「NO ACTION」を構成すると、親キーが変更されたり、データベースから削除されたりしても、特別なアクションは実行されません。
したがって
INSERT INTO MASTER (_ID) VALUES (1);
INSERT INTO SERVANT (_ID, MASTERID) VALUES (1,1);
DELETE FROM MASTER;
空のMASTERテーブルと、どこにも指していない外部キーを持つSERVANTテーブルが表示されます。
誰でもこの動作を確認し、そのように実装されている理由を説明できますか? または、外部キーのサポートを機能させるために何かを構成する必要がありますか? 私は SQLite の開発に慣れていないので、これがばかげた質問である場合はご容赦ください。
編集: (*) 私のテストには欠陥がありました。以下の回答を参照してください。