One thing to note is that there is an implicit "rowid" for each row already. Making an explicit ID column just adds an alias to it.
http://www.sqlite.org/lang_createtable.html#rowid Cheers, Larry On 9 March 2012 21:29, Simon Slavin <slav...@bigfraud.org> wrote: > > On 8 Mar 2012, at 5:25pm, John Salerno <johnj...@gmail.com> wrote: > >> On Mar 8, 7:46 am, Simon Slavin <slav...@bigfraud.org> wrote: >> >>> Yes, this would be the 'normalised' form. Something like >>> >>> artists: id, name, sortOrder >>> songs: id, artistID, title >>> plays: id, songID, playDate, playTime >> >> Ok, between you and Larry's last post, it's starting to make a lot >> more sense (except I don't intend to track "listeners"). I see now I >> need separate tables for the artists and songs, but just a few >> questions: >> >> 1. What is the sortOrder entry in the artists table you created? > > Sooner or later you're going to want to make a list which is sorted in artist > order. And you're going to want to list 'The Beatles' (if you have any taste > at all). But if you list artists in name order they'd come in the Ts, not > the Bs because 'The' is part of the band name. So having a "sortOrder" field > lets you enter 'The Beatles' as the band name but 'Beatles, The' in the > sortOrder field. Similarly, 'Elvis Presley' should be sorted under 'P', not > 'E'. Of course you could enter 'Presley, Elvis' instead of the name in the > order humans would say it, but I consider that a way of saying "The computer > is more important that you so humans must adapt to the computer way.", which > is an attitude I despise. > >> 2. Would there need to be an extra entries I should be aware of before >> I begin, or is the table outline you created complete? > > I'm not quite sure what you wanted all this for to start with, but the above > structure has enough in it to let you get started. You can add more tables > and/or columns later. > >> 3. What is the purpose of the id entry for the plays table? Is it used >> much, or is it just for completeness? > > It's more a habit than anything. Having an independent "id" column lets you > refer to individual rows by something which should never, under any > circumstances, need to change or refer to anything outside the database. For > instance, Suppose you started off listing playTime as local current time of a > play, and later you needed to convert all your times to a specific TimeZone, > and remove any change for Summer Time. You would be changing existing data > in the table in a way that meant any reference to that 'play' would have to > be changed too. But by giving every table an 'id' column defined as INTEGER > PRIMARY KEY (see > > http://sqlite.org/faq.html#q1 > > ) you know you will always have a consistent reference for any piece of data, > even if one of the fields you care about needs to be changed. So people who > work a lot with SQL databases tend to do this, or something like it, out of > experience without even thinking about it. > > 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