Um bom schema é orientado ao cliente, nullable por padrão nas bordas e evoluível sem versões. Ele modela o domínio nos termos que os clientes realmente usam, não nas suas tabelas de banco de dados.
Nullability
Torne um campo non-null (!) apenas quando você sempre consegue retorná-lo. Abusar de ! é uma armadilha: se um campo non-null dá erro, ele anula todo o seu objeto pai, transformando uma pequena falha em um grande vazio. Prefira nullable para qualquer coisa que dependa de um serviço downstream.
