我正在使用Symfony / Doctrine进行游戏。我有两个表“Model”,它代表一个3D模型,还有“Texture”,一个可以应用于每个模型的纹理列表。它们之间存在一对多的关系(一个模型有很多纹理)。
现在有许多其他实体(怪物,角色,道具等)需要纹理和模型信息。我需要建立一个关系,说“这个怪物有这个模型和这个纹理”(但由于模型和纹理本身是相关的,我不能使用具有地精纹理的龙模型 - 它必须是一个有效的对。)
问题在于我觉得同时具有 - >模型和 - >纹理属性是多余的,因为一个可以由另一个计算。没有数据库层检查纹理A实际上与模型B一起使用。
我最初认为我只有 - > getTexture(),并创建一个“假”模型getter,就像a)
public function getModel()
{
if ( $this->texture ) return $this->texture->getModel();
}
其他方法是 -
b)在Monster实体中同时使用 - > getModel()和 - > getTexture(),并添加一个检查模型和纹理匹配的验证规则。这里的缺点是我正在有效地创建冗余数据,并且我有很多验证规则可以在任何地方添加。
c)添加一个ModelInstance类,它在Model和Texture之间创建一个关系。这里的缺点是总体上存在更多的查询/复杂性,并且模型和纹理之间的简单关系不再存在 - 它已被更复杂的东西所取代。我们还必须在Texture上添加一个唯一约束。
很想听听其他人如何解决这个问题!
谢谢, 詹姆斯