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.