> In my model, a 'song' record consists of a unique artist/album/title
> A 'tag' is a name/value pair associated with a 'song': 
>    Song: song_id artist album title
>    Tag:  song_id name value
> Searching for the tags associated with a given song would be pretty
> easy, but complicating matters I need for tags to 'cascade'.  
> 
> This is so that a tag can be set for an entire album, and then
> overridden if necessary on a song by song basis.  For example, if I am
> checking the value of the tag 'rating' for Artist/Album/Title, but no
> such tag is found, I want to fall back on the tag for
> Artist/Album/NULL; failing that I search for Artist/NULL/NULL.
> 
> As I see it, this means that I need to be able to search the tags
> table by three different song_id's (id_exact, id_album, id_artist).  I
> can come up with several ways of doing this: joins, subselects, or
> unions.  For example, the join approach would need to do an outer join
> between the song and tag tables three times, once on song_id=id_exact,
> once on song_id=id_album, and finally on song_id=id_artist.
> 
> (note that if a tag exists for id_exact, it overrides the results for
> id_album and id_artist: the cascade is conditional on no tag found.)
> 
> It strikes me that this is probably going to be pretty inefficient.
> My requirements are not for incredible speed, but I probably need to
> be able to search through a database of 10,000 songs and 100,000 tags
> in something less than a tenth of a second on a typical desktop PC.
> 
> Is there a way of approaching this that works better with SQLite than
> other ways?

If I understand correctly, the "join approach" that you suggest is 
probably the only one in which indices will be used. So maybe it's
the best.





                
__________________________________ 
Do you Yahoo!? 
Yahoo! Mail - Find what you need with new enhanced search.
http://info.mail.yahoo.com/mail_250

Reply via email to