相互关联的组/列表的数据库设计

时间:2013-08-20 22:31:01

标签: mysql database database-design

我正在创建战斗体育统计网站。我在设计数据库时遇到问题,该数据库可以保存特定的bout统计数据战斗结束的方式。

它可以非常简单:

-> 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三角形”显然是“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 

这里我们得到一些相互关联的项目的问题,这基本上意味着一个人可以在一个无限循环中继续。这显然是数据库设计和渲染中的一个巨大问题。

我无法按特定顺序放置信息(例如将位置始终放在最后),因为我希望能够点击每个条目并且能够看到与此相关的所有父母/子女条目。

我唯一能想到的是完全分离不同的信息(提交,罢工,决定,立场,职位,命中目标等的不同列表)。然后我创建了一个类似标签的列表,我可以在其中添加尽可能多的“战斗结束标签”。这是实现我想要的唯一正确方法吗?

但是那意味着我不能轻易地检查所有“卫兵的三角形”,或者我需要制作一个精心设计的标签组合系统......

但这不是全部。

我还希望能够保存导致完成的事件链。

-> 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)

我想正确地使用此功能,我想从头开始正确实现它。但我觉得我过分复杂了这个问题。我觉得我的幻想已经超过了顶级,但似乎无法停止。有没有办法根据我的意愿创建适当的数据库结构?我应该选择什么样的表/行结构?或者我应该忘记这种疯狂并将其缩小到合理的(无论这意味着)设置?那么什么是我的问题的合理解决方案?

1 个答案:

答案 0 :(得分:0)

我真的不了解你的主题领域,但阅读你的问题提出了一些想法。

首先,如果要查找特定事件,请不要实施“精心设计的标签组合系统”。就数据库结构而言,这通常意味着以逗号分隔的列表,这在SQL中是非常禁止的。

最好你应该有一个回合表和第二个与回合相关的事件表。您需要定义一个第三个表,其中包含所有可能的事件(左下钩到右下颚,右钩到左下颚)和相关的id号,以及第四个具有id的竞争者表。然后你的回合表将包含有关回合本身(地点,日期等)以及竞争对手的ID的信息。 events / bout表将包含回合的id,回合中事件的时间,竞争者执行动作的id以及事件本身的id。