我有一个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_b
和fights
列,甚至没有fights_fighters
表格。
有没有人能够深入了解使用fights_fighters映射表与仅拥有战斗机a / b列的优缺点?
我想跟踪战斗的结局。他们可以结束a)敲门b)决定c)提交d)停止 - 我在哪里/如何嵌入战斗结局?
答案 0 :(得分:1)
1)正如你在fights_fighters表中所提到的那样,你很难执行战斗只有两个战士的规则。但是很难用fighter_a和fighter_b列查询表格来查找战斗机的所有战斗。
使用fights_fighters表,您可以通过扩展战斗机表格(战斗机,裁判或裁判)为裁判和裁判添加一个条目,然后fights_fighter表将需要两个战士,0到x裁判,0到x每场比赛的裁判员。 Maye成为一个fight_person表,人员表有战斗机,裁判或法官类型。
2)战斗结束将如何在战斗表中。您可以只使用带有预定义值的文本或数字字段,也可以在结果表中包含外键。如果您希望其他可能的结果(如暂停或撤消),则创建结果表,以便您可以在不更改数据库的情况下添加其他结果。你也不必记录哪个战斗机赢得了战斗吗?