我是一个刚起步的军事历史网站上的单人开发团队。该网站的一个方面是一个约1200场个人战斗的目录,包括参加的国家和编队(团、师等)。
编队信息(以及其他战斗信息)是由一个10人志愿队从一系列书籍中手工输入的。这些结构以不同的格式和缩写形式分组列出。在我建立数据收集表格的时候,我想不出一个好的方法来处理这些数据。。。并选择将其全部存储为MySQL数据库中的字符串,稍后再对其进行排序。
好吧,“晚一点”已经到来了——正如它经常发生的那样。:-)
每一场战斗在数据库中都有2+条记录-每个参加的国家一条。每个记录都有一个formations文本字符串,列出志愿者选择添加它们时出现的formations。
一些实际例子:
第39掷弹兵Rgmt,第26掷弹师
空军第二野战师,246步兵师
第255坦克旅第247步枪师
空军第二野战师,党卫军骑兵师
第28坦克旅,158步枪师,135步枪师,81坦克旅,242坦克旅
第78步兵师
图拉吉水上飞机基地第三特种海军登陆部队
第505步兵团第一营
最终目标是每个部队都有一个ID,这样就可以在整个作战数据库中跟踪其参与情况。编队层次结构,如上面的最后一项1st Battalion (of the) 505th Infantry Regiment也需要保留。在这种情况下,1st Battalion505th Infantry Regiment将被拆分,但1st Battalion将被标记为属于505th.
在数据库方面,我想我想从当前的作战信息表中提取编队字段,并创建三个新表:

FORMATION
[id] [name]

FORMATION_HIERARCHY
[id] [parent] [child]

FORMATION_BATTLE
[f_id] [battle_id]

解释起来很简单,表演起来却很复杂。
我在SO community寻找的只是一些关于如何最好地解决这个问题的提示。理想情况下,我不知道有什么方法可以解决这个问题。不过,作为最后的手段,我可以编写一个分类框架,然后打电话给我的志愿者,让他们整理2500多条记录。。。

最佳答案

您已经将您的问题标记为与PHP相关-但它不是。
你建议用代理键(ID)替换真实的标识符,但是真实的标识符本质上是唯一的,所以你只是让你的数据结构比需要的更复杂。尽管如此,层次结构的叶部分可能仅在父节点的范围内是唯一的。
你需要解决的最重要的问题是形成树是否总是两级的。我怀疑有时可能是1,有时可能超过2。你提议的结构在变深度树上不会很好地工作。
这可能有助于:
http://articles.sitepoint.com/article/hierarchical-data-database
C。

08-24 14:23