As a rule, many empty cells are cheap and should not be normalized. The only converse to # 2 is if you have a very large number of rows (millions — where performance problems may occur), a very large number of columns (more than 20 — where it is just annoying to see the data), or there are many unique restrictions on the EAV table.
With that said, now is 2011, and today it makes sense to use a programming structure with a database abstraction level so as not to directly create a relationship with the database. Something like Django Relational Mapper object allows you to focus on the models themselves and let you take the best care of yourself (in 95% of cases). This tutorial will help you get started. Django is only used to model a web development database. For non-web environments, it is better to use other environments.
source share