【发布时间】:2011-05-07 18:02:21
【问题描述】:
希望有人可以通过示例或一些建议阅读来阐明这个问题。 我想知道在类层次结构等效之后对表建模的最佳设计方法是什么。这可以通过一个例子来最好地描述:
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;
}
现在,当对表进行建模以与此类层次结构同步时,我采用了非常相似的方法:
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
我遇到的问题是试图弄清楚如何将每个Card 记录与相应表中包含其详细信息的记录相关联。具体来说,如何确定我应该查看哪个表。
我应该在Card 中添加一个VARCHAR 列来保存关联表的名称吗?这是我和我的同龄人达成的唯一解决方案,但它似乎太“肮脏”了。 保持设计的可扩展性是这里的关键,允许轻松添加新的子类。
如果有人可以提供一个示例或资源,展示一种清晰的镜像类/表层次结构的方式,将不胜感激。
【问题讨论】:
-
你看过 (N)Hibernate 是做什么的吗?它可能会给你一些关于不同可能方法的想法。
-
@Philipp:没有,但我在其他主题的主题中看到过它。我一定会调查的。
标签: language-agnostic database-design orm class-hierarchy