Hello all,

I'm implementing the new FOREIGN KEY support in our database and I have this 
small problem/question.

Before I had triggers to take care of maintaining deletion of data that's not 
referenced by any records, but I can't seem to reproduce the same behavior with 
just the foreign key commands. Maybe I'm missing something.

So, what I had was:

CREATE TABLE TableA(ID INTEGER PRIMARY KEY, SomeData, DataID INTEGER);
CREATE TABLE TableData(ID INTEGER PRIMARY KEY, Data UNIQUE);

Where DataID in TableA is ID in TableData.

I also had the following triggers:

CREATE TRIGGER TriggerADelete AFTER DELETE ON TableA WHEN OLD.DataID<>0
BEGIN
        DELETE FROM TableData WHERE TableData.ID=OLD.DataID AND OLD.DataID NOT 
IN (SELECT DataID FROM TableA WHERE DataID=OLD.DataID LIMIT 1);
END;

CREATE TRIGGER TriggerAUpdate AFTER UPDATE ON TableA WHEN OLD.DataID<>0
BEGIN
        DELETE FROM TableData WHERE TableData.ID=OLD.DataID AND OLD.DataID NOT 
IN (SELECT DataID FROM TableA WHERE DataID=OLD.DataID LIMIT 1);
END;

That kept the TableData empty of any non-referenced values.

What I've got now is (which doesn't work as I expected it to):

CREATE TABLE TableA(ID INTEGER PRIMARY KEY, SomeData, DataID INTEGER, FOREIGN 
KEY(DataID) REFERENCES TableData(ID) ON DELETE CASCADE ON UPDATE CASCADE);
CREATE TABLE TableData(ID INTEGER PRIMARY KEY, Data UNIQUE);

Is there a way to reproduce the same without using triggers? If not, I'm not 
sure what the advantage of using foreign keys is in my case...

Thank you for your thoughts!

   Dennis

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to