Hi,

Thank you very much Dennis for the reply.
I will try the method suggested by you.

Best Regards,
A.Sreedhar.
 

-----Original Message-----
From: Dennis Cote [mailto:[EMAIL PROTECTED] 
Sent: Saturday, December 01, 2007 1:31 AM
To: sqlite-users@sqlite.org
Subject: Re: [sqlite] sqlite:Deletion in Joins method

Sreedhar.a wrote:
> Hi,
>  
> I have created database using the joins method.
>  
> My database caontains 4 tables with the Artist(1),Album(2),Genre(or) 
> BGM(3),Combination of all these and Track names in one table.
>  
> I am having 4 tables as follows.
>
> *     
>
>       "create table ALBUM(AlbumId integer primary key,Album text);"
>
>      21     Album1
>      22     Album2
>      23     Album3
>
> *      "create table ARTIST(ArtistId integer primary key,Artist text);"
>
>     10     Madonna
>     11     Artist1
>
> *     
>
>       "create table BGM(BgmId integer primary key,Bgm text);"
>
>     31     rock
>     32     pop
>
> *     
>
>       "create table MUSIC(Id integer primary key,AlbumName 
> text,Album_TypeId integer,ArtistName text,Artist_TypeId 
> integer,BgmName text,Bgm_TypeId integer);"
>
>     1       Album1     21    Madonna    10    rock     31
>     2       Album2     22    Madonna    10    pop      32
>  
> If we want to delete a particular Artist from ARTIST table.
> I need to delete all the records corresponding with that artist name 
> in MUSIC table also and we need to check for the albums and Genre(BGM) 
> in Music are not present after deleting that particular Artist and 
> delete the records in ALBUM and  BGM Table .
>  
> Consider I have an Artist Madonna in ARTIST table. the user wants to 
> delete Madonna artist.
>  Currently, 
>                 1.We are deleting Madonna in ARTIST table.
>                 2.Weare first reading the album ids of Madonna and Bgm 
> id's of Madonna in one buffer and then we are deleting that Artist 
> Madonna in the MUSIC table.
>                 3.Now we will check wheather that Album ids and BGM 
> ids in buffer is still present in MUSIC table.If it does not present 
> we will delete it in the ALBUM and BGM table.If it still exists we 
> wont delete it in ALBUM and BGM table.
>                 
> But if we do like this we got the desired result but buffer size is 
> incresing if records are increasing.
> Is there any other method to solve deletion in multiple table.
>  
> Can anyone of you suggest how i can do the deletion.
>  
>  
> Best Regards,
> A.Sreedhar.
>  
>  
>
Hi,

I would first suggest that you normalize your database. By that I mean,
remove the redundant copies of the artist name, album name, and BGM name
from the music table.

Given these tables:

        create table ALBUM(AlbumId integer primary key, Album text);
        create table ARTIST(ArtistId integer primary key, Artist text);
        create table BGM(BgmId integer primary key, Bgm text);

Your music table should probably look something like this:

        create table MUSIC(
                Id integer primary key, 
                AlbumId integer references ALBUM, 
                ArtistId integer references ARTIST,  
                BgmId integer references BGM
        );

Now you can generate a table of results much like your previous music table
by joining these tables like this:

        select Album, Artist, Bgm
        from MUSIC
        join ALBUM using AlbumId
        join ARTIST using ArtistId
        join BGM using BgmId;

The one thing to note here is that even though I have indicated that the *Id
fields are foreign keys in the Music table by adding the references clause,
SQLite does not do anything with that information. It is basically a comment
for human readers.

You can add triggers to the database that will automatically ensure
referential integrity. With these triggers defined, SQLite will handle the
the cascaded deletes for you. This means that it will automatically delete
all music by an artist when that artist is deleted. You can get more info on
these triggers at http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers

Your code won't need to do these deletes and it won't need buffer space to
store intermediate results you are using to do the deletes manualy.

HTH
Dennis Cote

----------------------------------------------------------------------------
-
To unsubscribe, send email to [EMAIL PROTECTED]
----------------------------------------------------------------------------
-




-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to