比赛/赛事/战斗的架构?

时间:2011-03-29 00:36:13

标签: sql database-design

我有一个fighters表,一个events表,我正在创建一个fights表。

我想跟踪事件,所有战士(1对1战斗),(可选)裁判和(可选)裁判在战斗中。可选的字段是这样的,因为我不会总是有这些信息。

我应该如何为此设计架构?由于每次战斗都有不止一次,其中很多,所以这是否意味着我应该创建一个映射表?例如:


战斗

id   event_id     promotion_id
-----------------------

1    7            9

fights_fighters

id   fighter_id
-----------------------
1    3
1    4

战士

id   name
-----------------------
3    Fedor Emelianenko
4    Fabricio Werdum

事件

id   name                                date
-----------------------

7    Strikeforce! Fedor vs Werdum        2010-06-26

优惠

id   name
-----------------------

9    Strikeforce

这样的架构会有意义吗?由于战斗中只有2名战士,我最初只考虑在fighter_a表格中制作fighter_bfights列,甚至没有fights_fighters表格。

  1. 有没有人能够深入了解使用fights_fighters映射表与仅拥有战斗机a / b列的优缺点?

  2. 我想跟踪战斗的结局。他们可以结束a)敲门b)决定c)提交d)停止 - 我在哪里/如何嵌入战斗结局?

1 个答案:

答案 0 :(得分:1)

1)正如你在fights_fighters表中所提到的那样,你很难执行战斗只有两个战士的规则。但是很难用fighter_a和fighter_b列查询表格来查找战斗机的所有战斗。

使用fights_fighters表,您可以通过扩展战斗机表格(战斗机,裁判或裁判)为裁判和裁判添加一个条目,然后fights_fighter表将需要两个战士,0到x裁判,0到x每场比赛的裁判员。 Maye成为一个fight_person表,人员表有战斗机,裁判或法官类型。

2)战斗结束将如何在战斗表中。您可以只使用带有预定义值的文本或数字字段,也可以在结果表中包含外键。如果您希望其他可能的结果(如暂停或撤消),则创建结果表,以便您可以在不更改数据库的情况下添加其他结果。你也不必记录哪个战斗机赢得了战斗吗?