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