Все зависит от объемов данных и содержания, а также от отношения распределения тегов и плотности
Если у вас низкий коэффициент распределения и плотности тегов (типичные данные, созданные человеком), вы можете просто сгенерировать уникальный идентификатор или хэш для каждого возможного набора тегов, используемых данными. Свяжите идентификатор «коллекции тегов» с каждым экземпляром данных с этими тегами
Это может работать на удивление хорошо для многих форм сгенерированных человеком данных
например. Stackoverflow содержит ~ 500 000 вопросов и ~ 20 000 тегов (слишком много тегов дублирования!). Большинство вопросов имеют менее пяти тегов. В худшем случае у вас будет 500 000 идентификаторов «коллекции тегов», но более реалистично - несколько тысяч
Вам также потребуется либо отслеживание экземпляра, либо сборка мусора в коллекции «тэгов», так как определенные комбинации тэгов выходят из употребления
, например
- Tag: id, tagName
- TagCollection: id, instanceCount
- TagCollectionTag: tagCollectionIId, tagId
- Данные: id, title, content, tagCollectionId
Вставка тегов происходит быстро, если используется хэш (хэш для всех тегов коллекции). В противном случае вам придется искать в коллекциях TagCollection и TagCollectionTag, но в любом случае это не должно быть слишком большим
Поиск быстрый; поиск TagCollectionTag для экземпляров, содержащих определенный набор тегов, а затем найти строки данных с любым из этих tagCollectionId
Надеюсь, это не слишком смущает: -)