Several things here:
1. Do NOT access the database directly (via SQL). This relies on the layout staying the same which is almost certainly not the case, so your addon will break.
2. See 1.
3. Do NOT use the http-api to attempt to do the same thing. Again, this relies on the layout staying the same which is almost certainly not the case, so your addon will break.
4. See 3.
5. DO use jsonrpc for this stuff. It doesn't rely on the layout staying the same and the API is versioned so that hopefully your add-on won't break.
As for the non-normalisation in the db, this is because the db is designed for fast access - update frequency is very low, where as reads from the db happen a whole heap in comparison. Genres, for example, are a perfect example of this. If it were fully normalised, then we'd have to join the genre table which would both slow things down, as well as retrieving around 10 times the number of rows (one per genre) for each movie. We'd then have to scan through all those rows and dump it all into the movie objects. With it flat, it's much faster - no need to join to the genre table, and a single row per movie keeps things trivial.
Ofcourse, genres (and pretty much anything else that fits in this category) are also one of the things we don't actually need to fetch quickly (it's not used for sorting, and when we're filtering by genre we ofcourse join the genre table anyway) so this example is a bit silly, as we could request genre information on a per-movie basis off-thread after the main info is already in place. But given the current system, I think you get why things are the way they are.
Cheers,
Jonathan