字符串分类策略

时间:2010-05-25 07:27:18

标签: mysql string sorting classification

我是一个初出茅庐的军事历史网站上的独立开发团队。该网站的一个方面是约1,200个单独战斗的目录,包括国家和战争。参与的编队(团,分区等)。

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

嗯,“后来” - 因为它往往会发生 - 已经到了。 : - )

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

一些真实的例子:

  • 第39掷弹兵Rgmt,26th Volksgrenadier Division
  • 第246步兵师第2空军野战分部
  • 第247步枪师,第255坦克旅
  • SS骑兵部第二空军野战部
  • 28th Tank Brigade,158th Rifle Division,135th Rifle Division,81st Tank Brigade,242nd Tank Brigade
  • 第78步兵师
  • Tulagi水上飞机基地人员第3名Kure特种海军登陆部队
  • 第505步兵团第1营

最终目标是让每个部队拥有一个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 个答案:

答案 0 :(得分:1)

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

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

你需要解决的最重要的问题是形成树是否总是两个层次。我怀疑有时它可能是一个,有时它可能超过2.你建议的结构对于可变深度树不会很好。

这可能有所帮助:

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

下进行。