2010-05-25 70 views
2

我是初出茅庐的军事历史网站上的单人开发团队。该网站的一个方面是约1,200个个人战斗的目录,其中包括参与其中的国家&编队(团,部队等)。字符串分类策略

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

那么,“以后” - 因为它往往会发生 - 已经到来。 :-)

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

一些真实的例子:

  • 39掷弹Rgmt,第26届国民掷弹兵师
  • 第二空军场部,第246步兵师
  • 第247步兵师,第255坦克旅
  • 第二空军场部, SS骑兵师
  • 第28坦克旅第158步枪师第135步枪师第81坦克旅第242坦克旅
  • 第78步兵师
  • 第三吴特别海军登陆部队,图拉吉水上飞机基地人员
  • 第1营第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社区寻找的东西只是关于如何最好地解决这个问题的一些提示。理想情况下,有一些方法可以解决这个问题,我不知道。然而,作为最后的手段,我总是可以编写一个分类框架,并叫我回来的志愿者通过2,500+记录进行排序...

回答

1

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

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

你需要解决的最重要的问题是编队树是否总是两层。我怀疑有时它可能是一个,有时它可能超过2个。你提出的结构对于不同深度的树木不会很好地工作。

这可能会帮助:

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

C.

+0

谢谢symcbean。我已经删除了PHP标签。那篇文章非常有帮助,会给我一个好的开始。无论我以何种方式解决问题,似乎我在我面前都做了很多工作。我打算把这个问题再开放24小时。如果没有人能够回答你的答案(我认为不太可能),那是你的答案。 :-) – Drew 2010-05-26 01:19:04