2

我是一个刚刚起步的军事历史网站上的单人开发团队。该网站的一个方面是大约 1,200 场个人战斗的目录,包括参加的国家和编队(团、师等)。

编队信息(以及其他战斗信息)是由一个 10 人的志愿者团队从一系列书籍中手动导入的。这些编队以不同的格式和缩写模式分组列出。在我设置数据收集表单的时候,我想不出处理这些数据的好方法......并选择将它们全部作为字符串存储在 MySQL 数据库中,然后再进行整理。

好吧,“稍后”——因为它往往会发生——已经到来。:-)

每场战斗在数据库中都有 2 条以上的记录 - 每个参与的国家都有一条。每条记录都有一个编队文本字符串,列出了志愿者选择添加时出现的编队。

一些真实的例子:

  • 第 39 掷弹兵团,第 26 人民掷弹兵师
  • 德国空军第 2 野战师,第 246 步兵师
  • 第247步兵师,第255坦克旅
  • 德国空军第 2 野战师,党卫军骑兵师
  • 第28坦克旅、第158步兵师、第135步兵师、第81坦克旅、第242坦克旅
  • 第78步兵师
  • 第 3 吴特种海军登陆部队,图拉吉水上飞机基地人员
  • 第 505 步兵团第 1 营

最终目标是让每一个单独的部队都有一个ID,这样就可以在整个战斗数据库中追踪其参与。形成层次结构,例如上面的最后一项1st Battalion (of the) 505th Infantry Regiment也需要保留。在这种情况下,1st Battalionand505th Infantry Regiment将被拆分,但1st Battalion会被标记为属于505th.

在数据库方面,我想我想从当前的战斗信息表中拉出阵型字段并创建三个新表:

FORMATION
[id] [name]

FORMATION_HIERARCHY
[id] [parent] [child]

FORMATION_BATTLE
[f_id] [battle_id]

解释起来很简单,但实施起来却很复杂。

我从 SO 社区中寻找的只是一些关于如何最好地解决这个问题的提示。理想情况下,有某种我不知道的方法可以解决这个问题。然而,作为最后的手段,我总是可以编写一个分类框架并叫我的志愿者回来对 2,500 多条记录进行分类......

4

1 回答 1

1

您已将您的问题标记为与 PHP 相关 - 但事实并非如此。

您提议用代理键 (id) 替换真实标识符,但是真实标识符本质上是唯一的 - 所以您只是让您的数据结构比它需要的更复杂。话虽如此,层次结构的叶子部分可能仅在父节点范围内是唯一的。

您需要解决的最重要的问题是形成树是否总是有两个层次。我怀疑有时可能是 1,有时可能超过 2。您提出的结构不适用于可变深度树。

这可能会有所帮助:

http://articles.sitepoint.com/article/hierarchical-data-database

C。

于 2010-05-25T09:30:13.140 回答