2010-05-25 6 views
2

Je suis l'équipe de développement d'un homme sur un site d'histoire militaire naissant. Un aspect du site est un catalogue de ~ 1200 batailles individuelles, y compris les nations & formations (régiments, divisions, etc) qui ont pris part.Stratégies de catégorisation par chaîne

Les informations de formation (ainsi que les autres informations de combat) a été importé manuellement à partir d'une série de livres par une équipe de bénévoles de 10 hommes. Les formations ont été répertoriées dans des groupes avec différents modèles de formatage et d'abréviation. Au moment où j'ai mis en place les formulaires de collecte de données, je ne pouvais pas trouver un bon moyen de traiter ces données ... et j'ai choisi de stocker tout cela sous forme de chaînes dans la base de données MySQL et de le trier plus tard.

Eh bien, « plus tard » - comme il a tendance à se produire - est arrivé. :-)

Chaque bataille a 2+ enregistrements dans la base de données - une pour chaque nation qui ont participé. Chaque enregistrement a une chaîne de texte de formations répertoriant les formations présentes lorsque le volontaire a choisi de les ajouter.

Quelques exemples concrets:

  • 39e Grenadier RGMT, 26 Volksgrenadier Division
  • 2e Division de l'Luftwaffe, 246e Division d'infanterie
  • 247e Rifle Division, 255e Brigade de chars
  • 2e Division de l'Luftwaffe, SS Division de cavalerie
  • 28 Brigade de chars, 158e division d'infanterie, 135e division d'infanterie, 81ème brigade de chars, 242ème Brigade de chars
  • 78e Division d'infanterie
  • 3e Kure Force spéciale d'atterrissage navale, Tulagi Hydravion personnel de la base
  • 1er Bataillon 505ème Régiment d'infanterie

Le but ultime est pour chaque force individuelle d'avoir une carte d'identité, de sorte que sa participation peut être tracé tout au long de la base de données de combat. La hiérarchie de formation, telle que l'élément final au-dessus de 1st Battalion (of the) 505th Infantry Regiment doit également être préservée. Dans ce cas, 1st Battalion et 505th Infantry Regiment serait divisé, mais 1st Battalion serait marqué comme appartenant à la 505th.

En ce qui concerne la base de données, je pense je veux tirer le champ de la formation de la table en cours d'information de combat et de créer trois nouvelles tables:

FORMATION 
[id] [name] 

FORMATION_HIERARCHY 
[id] [parent] [child] 

FORMATION_BATTLE 
[f_id] [battle_id] 

C'est simple à expliquer, mais compliqué à mettre en œuvre.

Ce que je suis à la recherche de la communauté SO est juste quelques conseils sur la meilleure façon d'aborder ce problème. Idéalement, il existe une sorte de méthode pour résoudre ce problème que je ne connais pas. Cependant, en dernier recours, je pourrais toujours coder un cadre de classification et d'appeler mes volontaires de retour pour trier 2,500+ records ...

Répondre

1

Vous avez taguées votre question PHP lié - mais ce n'est pas.

Vous proposez de remplacer les identificateurs réels par des clés de substitution (ids). Cependant, les identificateurs réels sont intrinsèquement uniques - vous ne faites donc que compliquer la structure de vos données. Cela dit, la partie feuille de la hiérarchie peut seulement être unique dans la portée du nœud parent.

La question la plus importante que vous devez vous poser est de savoir si l'arbre de formation sera toujours à deux niveaux. Je soupçonne que parfois cela peut être un et parfois il peut être supérieur à 2. La structure que vous proposez ne va pas très bien fonctionner avec des arbres de profondeur variable.

Cela peut aider:

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

C.

+0

Merci symcbean. J'ai enlevé le tag PHP. Cet article a été extrêmement utile et me donnera un bon départ. Il semble que j'ai beaucoup de travail devant moi, peu importe de quelle manière j'aborde le problème. Je vais laisser cette question ouverte pendant encore 24 heures. Si personne ne peut répondre à votre réponse (improbable, je pense), c'est à vous. :-) – Drew

Questions connexes