I name my tables exactly the same as I name the objects which I am going to create to wrap them. This works well with modern ORMs (Object relational mappers) because they can often create an object model for you based on your database structure (or the other way around). The accepted answer seems to belittle the "pain of typing an underscore", but I take it seriously. Suffering from RSI, especially in my pinkys, which I use to hold down the Shift and Ctrl keys, I do absolutely everything I can to avoid unnecessary underscores. Of course, a good answer to this issue is to remap your CapsLock key to either the Shift key or the Underscore key. But in any case, I add this answer to an old question because no one mentioned working with your ORM. Since I do most programming in .NET most of my properties are camel cased and so I name my db columns in camel case as well. I have absolutely no problem camel casing abbreviations. So I do things like:
PersonDao.GetIdByName("Hello world").
Camel casing definitely gets annoying for long names... but then, I avoid long names. Usually it means that I've organized things incorrectly. And if I determine that I haven't, well... in those cases, long names are so rare in my code and the situation so unique, that it doesn't slow me down anyway.
I think naming's absolutely of paramount importance. And just like some people have an XML fetish, others have database fetishes. Personally, I like to use my ORMs to ignore my database completely (or as much as possible). To facilitate this, I name my columns just as I name the properties in code. So, ultimately, underscore hating aside, I use whatever conventions exist for the language my code exists in.