Esta é uma típica tabela estreita (baseada em atributos) versus uma discussão de tabela ampla. O problema com a abordagem nº 2 é que você provavelmente terá que dinamizar os dados, para colocá-los em um formato com o qual o usuário possa trabalhar (de volta a um formato de exibição ampla). Isso pode consumir muitos recursos à medida que o número de linhas aumenta e o número de atributos aumenta. Também é difícil olhar para a tabela, na visualização de tabela bruta, e ver o que está acontecendo.
Já tivemos essa discussão muitas vezes em nossa empresa. Temos algumas tabelas que se prestam muito bem a um esquema de tipo de atributo. Sempre decidimos contra isso por causa da necessidade de dinamizar os dados e da incapacidade de visualizar os dados e fazer com que eles façam sentido (mas esse é o menor dos dois problemas para nós - simplesmente não queremos dinamizar milhões de linhas de dados).
BTW, eu não armazenaria a idade como um número. Eu guardaria a data de nascimento, se você tiver. Além disso, não sei a que 'Língua materna' se refere, mas, se for o idioma que a mãe fala, eu armazenaria isso como um FK em uma tabela de idiomas mestre. É mais eficiente e diminui o problema de dados incorretos por causa de um idioma com erros ortográficos.