我是一个初出茅庐的军事历史网站上的独立开发团队。该网站的一个方面是约1,200个单独战斗的目录,包括国家和战争。参与的编队(团,分区等)。
编队信息(以及其他战斗信息)由10人志愿者团队从一系列书籍中手动导入。编队被列为具有不同格式和缩写模式的组。在我设置数据收集表单时,我想不出一种处理数据的好方法......并选择将它们全部存储为MySQL数据库中的字符串并稍后进行排序。
嗯,“后来” - 因为它往往会发生 - 已经到了。 : - )
每场战斗在数据库中都有2条以上的记录 - 每个记录对应一个参与的国家。每个记录都有一个编队文本字符串,列出志愿者选择添加它们时存在的编队。
一些真实的例子:
最终目标是让每个部队拥有一个ID,以便在整个战斗数据库中追踪其参与。还需要保留编队层次结构,例如1st Battalion (of the) 505th Infantry Regiment
之上的最终项目。在这种情况下,1st Battalion
和505th Infantry Regiment
会被拆分,但1st Battalion
会被标记为属于505th.
在数据库术语中,我认为我想从当前战斗信息表中拉出编队字段并创建三个新表:
FORMATION
[id] [name]
FORMATION_HIERARCHY
[id] [parent] [child]
FORMATION_BATTLE
[f_id] [battle_id]
解释起来很简单,但制作起来很复杂。
我在SO社区寻找的只是一些提示如何最好地解决这个问题。理想情况下,有一种解决方法,我不知道。然而,作为最后的手段,我总是可以编写一个分类框架,然后召回我的志愿者,对2,500多条记录进行排序......
答案 0 :(得分:1)
您已将问题标记为与PHP相关 - 但事实并非如此。
您建议使用代理键(ID)替换实际标识符,但实际标识符本质上是唯一的 - 因此您只是使您的数据结构比它需要的更复杂。话虽如此,层次结构的叶子部分可能只在父节点的范围内是唯一的。
你需要解决的最重要的问题是形成树是否总是两个层次。我怀疑有时它可能是一个,有时它可能超过2.你建议的结构对于可变深度树不会很好。
这可能有所帮助:
http://articles.sitepoint.com/article/hierarchical-data-database
下进行。