As duas abordagens mais comuns são Tabela por Classe (ou seja, uma tabela para a classe base e outra tabela para cada subclasse que contém as colunas adicionais necessárias para descrever a subclasse) e Tabela por Hierarquia (ou seja, todas as colunas em uma tabela, com uma ou mais colunas para permitir a discriminação de subclasses.Qual é a melhor abordagem realmente depende das particularidades de seu aplicativo e estratégia de acesso a dados.
Você teria Table Per Class em seu primeiro exemplo invertendo a direção do FK e removendo os ids extras do pai. Os outros dois são essencialmente variantes de tabela por classe.