Это реальная проблема, которая применяется к элементам тегов вообще (и да, это относится и к StackOverflow, и нет, это не вопрос о StackOverflow).
Вся проблема с тегами помогает группировать подобные элементы, какие бы они ни были (шутки, сообщения в блогах, вопросы и т.д.). Однако там (обычно, но не строго) есть иерархия тегов, что означает, что некоторые теги также подразумевают другие теги. Чтобы использовать знакомый пример, тег "С#" также означает ".net"; другой пример, в базе данных шуток, тег "блондинки" подразумевает "насмешливый" тег, аналогично "ирландский" или "безымянный" или "канадский" и т.д. в зависимости от происхождения страны-шутки.
Как вы справились с этим, если хотите, в своих проектах? Я дам ответ, описывающий два разных метода, которые я использовал в двух отдельных случаях (фактически, тот же механизм, но реализованный в двух разных средах), но меня также интересуют не только аналогичные механизмы, но и ваше мнение по проблеме иерархии.