可以说,我想开发一款游戏(类似于RTS,具有经济导向),在该游戏中,玩家以及AI都可以拥有几乎所有游戏对象。例如:玩家拥有一块土地和一些建筑物;其他玩家或AI也可以在此地块上拥有一些建筑物;或者同样,有人可以在整个地区拥有这类土地,并将其中一部分出售给他人。可能的对象可以是可移动的,也可以是不可移动的,但是它们都有共同的属性,例如所有者,标题,世界坐标等。关于Django模型的哪种DB结构最适合此描述?
Owner_Table-(一对多)-PossesableObject_Table
PossesableObject_Table-(多对多)-PossesableObject_Table(在
例如,与地块相连的建筑物)
要么
Owner_Table-(一对多)-PossesableObjectType_Table(每种可能对象的表)
PossesableObjectType_Table-(一对多)-
PossesableObjectType_Table(针对上面已经说明的类型
链接)
最佳答案
您应该提出以下问题:
A最多可以链接到1个或多个(超过1个)B吗?
B最多可以链接1个或多个A吗?
如果A可以链接到许多B,并且B可以链接到许多A,则需要多对多链接。
如果A最多可以链接到1 B,并且B可以链接到很多A,则您需要一个一对多链接,其中链接列在表A中。
如果A可以链接到最多1个B,而B可以链接到最多1 A,则需要一对一链接。在这一点上,您应该考虑是否可以将它们连接到1个单一表中,尽管从其他方面考虑这可能是不可能的,也可能不是很好。
在您的情况下,您会问自己一个问题:一个PossessableObject最多只能链接到1个其他PossessableObject或许多其他PossessableObject吗?换句话说:一个PossessableObject最多只能由1个其他PossessableObject或许多其他PossessableObject拥有吗?如果答案最多为1,则使用一对多链接;如果答案很多,则使用多对多链接。
另外,关于在PossesableObject_Table上针对每种可能的对象类型的问题:我认为最好将它们共有的东西放在单个表中,然后指定类型。不能为每种具有对象唯一属性的对象类型创建单独的表并将它们连接起来,但是您的方法也可以正常工作。这取决于您拥有多少种不同的类型以及最容易使用的类型。记住:只要是可行的就可以。