如何在数据库中建模X vs Y vs Z关系?

时间:2014-05-08 11:48:01

标签: entity-relationship theory

我正在考虑制作一款“战斗”游戏,您可以安排在多人之间进行战斗的活动。

IE:一个PPV有很多细分,每个细分可能是'促销'或'打架' - 如果它可以有一场战斗:

即: 1对1(单) 2对2(标签) X对Y(其中X和Y可以是1-5中的任何数字)

在上面的示例中,您可以建立关系(1到多个)或多对多关系。

即: [Segment]有很多战士(等式的左手) [Segment]有很多战士(等式左右)

这似乎很好。

但是,当谈到更复杂的关系时,我会陷入困境。

例如,如果比赛现在是1-vs-1-vs-1或4-way或6-way匹配的三重威胁(1 vs 1 vs 1 vs 1 vs 1 vs 1)我不知道如何在有意义的数据库中对此进行建模。

使用关系的最初原因是因为匹配的类型可以是不同的类型和模块化。

我能想到摆脱这种情况的唯一方法就是拥有数组或人员列表,并使其成为每种匹配类型的硬限制。

但我想知道这种类型的其他游戏如何为他们的数据库建立这样的关系。

因此,我的查询是 - 如何在数据库中建模X与Y对Z关系?

现在谢谢。

1 个答案:

答案 0 :(得分:2)

听起来我应该像团队和比赛一样思考:

  • 团队是一组玩家(根据您的描述,有1到2名玩家)
  • 比赛是一组球队,每支球队都会与其他球队进行战斗。

由于匹配是集合而团队是集合,因此您可以表示以下内容:

{{P1},{P2}} => P1 vs P2

{{P1,P2},{P3,P4}} => P1 + P2对比P3 + P4

{{P1},{P2},{P3}} => P1 vs P2 vs P3

这都是使用数据库中的1到N个关系建模的。

以下是P1 + P2与P3与P4的数据库示例(即{{P1,P2},{P3},{P4}})

**Player**
+--------+
|PlayerID|
+--------+
|P1      |
|P2      |
|P3      |
|P4      |
+--------+

**Team**
+--------+
|TeamID  |
+--------+
|Team1   |
|Team2   |
|Team3   |
+--------+

**Team Players**
+------+--------+
|TeamID|PlayerID|
+------+--------+
|Team1 |P1      |
|Team1 |P2      |
|Team2 |P3      |
|Team3 |P4      |
+------+--------+

**Match**
+--------+
|MatchID |
+--------+
|Match1  |
+--------+

**Match Teams**
+-------+--------+
|MatchID|TeamID  |
+-------+--------+
|Match1 |Team1   |
|Match1 |Team2   |
|Match1 |Team3   |
+-------+--------+