ビューにトリガーを張る

SQLiteだとビューは読み取り専用で、INSERTUPDATEDELETEできないので、代わりにトリガーを使う。とりあえずINSERTだけメモ。最小限しか書いてないので、実際に使うときはもう少し必要だろうね。NOT NULL制約がかかってたりするかもしれないし、UPDATEDELETEも必要だし。

CREATE TABLE a (id, a);
CREATE TABLE b (id, b);
CREATE TABLE c (id, c);

CREATE VIEW v AS SELECT a.id, a.a, b.b, c.c FROM a NATURAL JOIN b NATURAL JOIN c;

CREATE TRIGGER t_v
INSTEAD OF INSERT ON v 
BEGIN
  INSERT INTO a VALUES (NEW.id, NEW.a);
  INSERT INTO b VALUES (NEW.id, NEW.b);
  INSERT INTO c VALUES (NEW.id, NEW.c);
END;

INSERT INTO v VALUES (1, 'A', 'B', 'C');