Design de tabela e hierarquias de classe

Espero que alguém possa lançar alguma luz sobre esse assunto através de um exemplo ou talvez de uma leitura sugerida.Eu estou querendo saber qual é a melhor abordagem de design para modelar tabelas após suas equivalências na hierarquia de classes. Isso pode ser melhor descrito através de um exemplo:

abstract class Card{
    private $_name = '';
    private $_text = '';
}

class MtgCard extends Card{
    private $_manaCost = '';
    private $_power = 0;
    private $_toughness = 0;
    private $_loyalty = 0;
}

class PokemonCard extends Card{
    private $_energyType = '';
    private $_hp = 0;
    private $_retreatCost = 0;
}

Agora, ao modelar tabelas para sincronizar com essa hierarquia de classes, escolhi algo muito semelhante:

TABLE Card
  id            INT, AUTO_INCREMENT, PK
  name          VARCHAR(255)
  text          TEXT

TABLE MtgCard
  id            INT, AUTO_INCREMENT, PK
  card_id       INT, FK(card.id)
  manacost      VARCHAR(32)
  power         INT
  toughness     INT
  loyalty       INT

TABLE PokemonCard
  id            INT, AUTO_INCREMENT, PK
  card_id       INT, FK(card.id)
  hp            INT
  energytype    ENUM(...)
  retreatcost   INT

O problema que estou tendo é tentar descobrir como associar cadaCard registro com o registro contendo os detalhes da tabela correspondente. Especificamente, como determinar em que tabela eu deveria estar.

Devo adicionar umVARCHAR coluna paraCard manter o nome da tabela associada? Essa é a única resolução que eu e meus colegas chegamos, mas parece muito "suja".Manter o design extensível é a chave aqui, permitindo a fácil adição de novas subclasses.

Se alguém pudesse fornecer um exemplo ou recursos mostrando uma maneira limpa de espelhar hierarquias de classe / tabela, isso seria muito apreciado.

questionAnswers(2)

yourAnswerToTheQuestion