Размышляя о том, как можно структурировать данные, я мог подумать о системе из четырех таблиц. одна таблица будет исходными данными (например, с SO должна быть какая-то таблица вопросов), которая присоединяется к таблице тегов, а затем к таблице весов тегов, которая присоединяется к таблице тегов.
#pseudo code
source table {
id: int
source_data: text
}
source_tag table {
source_id: int
tag_id: int
}
tag table{
id: int
tag: String(30)
}
tag_weight table {
base_tag_id: int
weight: float( 0-10 or 100 ) or int ( count of mutual occurrence )
source_tag_id: int
}
Я понятия не имею, насколько эффективна эта структура, но я полагаю, что над ней нужно работать. В противном случае, чтобы это работало, при новых поступлениях в исходные данные может сработать триггер после обновления или рабочий процесс в фоновом режиме перебалансирует веса в заданное время.