我正在创建搏击运动统计网站。我在设计包含特定回合统计数据的数据库时遇到了麻烦,例如战斗结束的方式。
它可以非常简单:
-> Decision
或者
-> Decision -> Unanimous
或者
-> Decision -> Unanimous -> 30-27, 29-28, 29-28
或者
-> Submission -> Armbar
在这种情况下,我们有一个简单的树(每个项目可以有一个或多个孩子),它可以由简单的(id, "Name", parent_id)
组织来实现。在其中,对于每场战斗,我都会分配一些唯一的 bout-finish-id 并上树以与父母、链接和所有东西建立一个适当的链。
不幸的是,有些项目有多个父项,情况也可能更复杂一些:
-> Submission -> Armbar -> Armbar triangle
-> Submission -> Triangle -> Armbar triangle
这应该很容易,因为“Armbar triangle”显然是“Armbar”和“Triangle”的子代。但是此时我已经迷路了,不太了解如何正确设计这个多父列表。
但还有更多。
还有大量其他统计数据。例如,所述完成的所有其他细节。在 KO/TKO 胜利的情况下,这可能是有关每个战士姿态(左、右、中立)、特定打击、有关移动的信息、命中区域等的一些信息。类似于“TKO。从右臂向前移动右肘-位置在左手对手下巴的左侧。”。
如果我们谈论提交,我们来谈谈位置的简单例子。
-> Submission -> Triangle -> Armbar triangle -> Guard position
或者
-> Submission -> Triangle -> Armbar triangle -> Mount position
但这里的问题是 Guard 或 Mount 可以在这条链的任何点。以下所有内容都是正确的:
-> Submission -> Triangle -> Guard position -> Armbar triangle
-> Submission -> Guard position -> Triangle -> Armbar triangle
-> Guard position -> Submission -> Triangle -> Armbar triangle
在这里,我们遇到了一些相互关联的项目的问题,这基本上意味着一个人可以在一个无限循环中继续下去。这显然是数据库设计和渲染中的一个巨大问题。
我无法将信息按特定顺序排列(例如,始终将位置放在末尾),因为我希望能够单击每个条目并能够查看与该条目相关的所有父母/孩子。
我唯一能想到的就是完全分离不同的信息(提交、打击、决定、立场、位置、命中目标等的不同列表)。然后我创建一个类似标签的列表,我可以在其中放置尽可能多的“战斗结束标签”。这是实现我想要的唯一正确方法吗?
但这意味着我不能轻易检查例如所有“来自Guard的三角形”,或者我需要制作一个精心设计的标签组合系统......
但这还不是全部。
我还希望能够保存导致完成的事件链。
-> Loser's (righty) left hook to winner (lefty)'s right jaw -> Loser's Ground and Pound from Guard -> Winner's Armbar triangle from Mount
这是描述的示例,它只能包含先前定义的“正确饰面”。
现在我们已经完成了,我有机会讲述我的梦想系统(无论它是否可以实施),如果能够包含所有不在“官方整理”中的细节,那就太好了列表”,例如“向右滑”、“双腿倒地”、“Hipbump 扫/反转”等等。
信不信由你,但还有更多……即使我们忘记了最后的愿望(关于滑倒和删除),我真的很希望能够根据级别对事件链中的项目进行评分他们影响了结果。例如从 1 到 3。类似:
-> Loser's (righty) left hook to winner (lefty)'s right jaw (3) -> Loser's Ground and Pound from Guard (1) -> Winner's Armbar triangle from Guard (3)
我想正确地制作这个功能,我想从一开始就正确地实现它。但我觉得我把这个问题复杂化了。我觉得我的幻想太过分了,但似乎无法停止。有没有办法根据我的所有意愿创建正确的数据库结构?我应该选择什么样的表/行结构?还是我应该简单地忘记这种疯狂并将其缩小到合理的(无论这意味着什么)设置?那么我的问题的合理解决方案是什么?