I understand parent table to child table modifications with ON
UPDATE/ON DELETE CASCADS. It's very good. Now, I stuck with child to
parent tables query optimization after normalization.

Scenario:

sqlite> pragma foreign_keys = on;
sqlite> CREATE TABLE artist(artistid    INTEGER PRIMARY KEY
AUTOINCREMENT, artistname  TEXT);
sqlite> CREATE TABLE track(trackid     INTEGER PRIMARY KEY
AUTOINCREMENT, trackname   TEXT, trackartist INTEGER REFERENCES
artist(artistid) ON UPDATE CASCADE ON DELETE CASCADE);

for ex: Five tracks are pointing to one artist. it needs to delete
track by track. For first track to four tracks, it should not delete
artist information from artist table. For fifth track, it should
delete track information along with artist information. Is it possible
to do with single query?

On Mon, Nov 11, 2013 at 3:08 PM, dd <durga.d...@gmail.com> wrote:
> Hi,
>
> Thanks Simon.
>
> sqlite> pragma foreign_keys = on;
> sqlite> CREATE TABLE artist(artistid    INTEGER PRIMARY KEY
> AUTOINCREMENT, artistname  TEXT);
> sqlite> CREATE TABLE track(trackid     INTEGER PRIMARY KEY
> AUTOINCREMENT, trackname   TEXT, trackartist INTEGER REFERENCES
> artist(artistid) ON UPDATE CASCADE ON DELETE CASCADE);
>
> How do I insert  trackname as "That's Amore" and artistname as "Dean
> Martin" with single query in artist and track tables?
>
> dd
>
>
>
>
> On Sun, Nov 10, 2013 at 6:45 PM, Simon Slavin <slav...@bigfraud.org> wrote:
>>
>> On 10 Nov 2013, at 10:54am, dd <durga.d...@gmail.com> wrote:
>>
>>>  I have two tables in my database.
>>>
>>>  After applying normalization, there are twelve tables with foreign
>>> key support.
>>>
>>>  For insert/delete operations, it has to execute twelve queries
>>> instead of two. Is it recommended way?
>>
>> You should not have to write twelve queries in your own programming.  If you 
>> have set up your FOREIGN KEYs correctly, SQLite should be doing that for 
>> you.  The foreign keys facility should have allowed you to move some of your 
>> business model from your own programming into SQLite, which should be 
>> dealing with it in one place in a consistent way.
>>
>>>  In delete case, do always need to check in parent table whether
>>> child key refers to any other rows in parent table?
>>
>> Again, if you have set up your foreign keys correctly, SQLite should be 
>> doing the checking or deleting for you.  Whether SQLite will prevent you 
>> from deleting, or delete rows from other tables, depends which of these 
>> actions you have set up:
>>
>> <http://www.sqlite.org/foreignkeys.html#fk_actions>
>>
>> Simon.
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@sqlite.org
>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to