стратегии категоризации строк - PullRequest
2 голосов
/ 25 мая 2010

Я - команда разработчиков из одного человека на молодом военно-историческом сайте. Одним из аспектов сайта является каталог ~ 1200 отдельных сражений, включая нации и соединения (полки, дивизии и т. Д.), Которые приняли участие.

Информация о формировании (а также другая информация о битве) была вручную импортирована из серии книг командой из 10 человек. Формации были перечислены в группах с различными форматами и шаблонами аббревиатур. В то время, когда я настраивал формы сбора данных, я не мог придумать хороший способ обработки этих данных ... и решил сохранить их все как строки в базе данных MySQL и разобраться с ними позже.

Ну, "позже" - как это обычно бывает - наступило. : -)

Каждое сражение имеет 2+ записи в базе данных - по одной для каждой нации, которая участвовала. У каждой записи есть текстовая строка образований, в которой перечислены составы, которые добровольцы решили добавить.

Некоторые реальные примеры:

  • 39-й гренадерский отряд, 26-я дивизия Фольксгренадеров
  • 2-я полевая дивизия люфтваффе, 246-я пехотная дивизия
  • 247-я стрелковая дивизия, 255-я танковая бригада
  • 2-я полевая дивизия люфтваффе, кавалерийская дивизия СС
  • 28-я танковая бригада, 158-я стрелковая дивизия, 135-я стрелковая дивизия, 81-я танковая бригада, 242-я танковая бригада
  • 78-я пехотная дивизия
  • 3-й специальный военно-морской десант Куре, личный состав базы Тулаги на гидросамолете
  • 1-й батальон 505-го пехотного полка

Конечная цель заключается в том, чтобы каждый отдельный отряд имел идентификационный номер, чтобы его участие можно было отслеживать по всей базе данных битвы. Иерархия формации, такая как последний элемент выше 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 - это лишь несколько советов о том, как лучше всего решить эту проблему. В идеале есть какой-то метод решения этой проблемы, о котором я не знаю. Однако, в крайнем случае, я всегда мог закодировать структуру классификации и перезвонить моим добровольцам, чтобы отсортировать более 2500 записей ...

1 Ответ

1 голос
/ 25 мая 2010

Вы пометили свой вопрос как связанный с PHP, но это не так.

Вы предлагаете заменить реальные идентификаторы суррогатными ключами (идентификаторами), однако реальные идентификаторы по сути уникальны - так что вы просто делаете свою структуру данных более сложной, чем она должна быть. Сказав это, конечная часть иерархии может быть уникальной только в пределах родительского узла.

Самый важный вопрос, который вам нужно решить, состоит в том, всегда ли дерево формирования будет двухуровневым. Я подозреваю, что иногда это может быть один, а иногда может быть больше 2. Предлагаемая вами структура не будет работать очень хорошо с деревьями переменной глубины.

Это может помочь:

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

С

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...