Какая модель данных используется для тегов и синонимов тегов? - PullRequest
11 голосов
/ 30 августа 2011

Я задал этот вопрос на мета , но теперь я понимаю, что он может быть более подходящим для основного сайта, так как это общий вопрос, который относится к любой системе, основанной на тегах (я рад закрыть / удалите один в зависимости от того, куда люди думают, что этот вопрос должен идти)


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

Несколько вопросов об отношениях и «модели данных» синонимов тегов:

Я предполагаю, что главный тег может иметь несколько тегов синонимов, но тег синонимов может быть только синоним одного основного тега. Это правильно?

Кроме того, может ли главный тег также быть тегом синонима? Например, допустим, у вас есть тег с именем javascript, и у вас было:

Мастер : JS
Синонимы : java-скрипт, js-web

Вы также можете иметь:

Мастер : JavaScript
Синонимы : js

Таким образом, в приведенном выше примере вы по-прежнему решаете в конечном итоге разрешить js-web в javascript , поскольку главный тег: js сам является тегом синонима. .

Кроме того, это заставляет меня думать, что вы также можете столкнуться с круговой ссылкой, где у вас есть

Мастер : JS
Синонимы : java-script

и

Мастер : JavaScript
Синонимы : js

Как система справляется с циклическими ссылками?

1 Ответ

16 голосов
/ 18 сентября 2011

Соблазнительно дать вам более теоретический ответ на мета, касающийся фолксономий, многозначности и тому подобного!Поскольку я отвечаю на стороне StackOverflow, я постараюсь дать немного более технический ответ.Выполнение запросов с помощью StackOverflow Data Explorer позволит мне попытаться ответить на ваши вопросы (я не связан со StackOverflow, поэтому точно не знаю).

В StackOverflow отношение мастер / синоним тега тщательно убирается и культивируется.На момент записи из Проводника Данных:

  • Теги имеют 29488 строк
  • TagSynonyms имеет 1916 строк

Интересно сравнить это с другимиfolksonomies, в одной статье " Теги Technorati: хорошая идея, ужасная реализация " говорится.

"Technorati объявляет, что теперь они отслеживают 466 951 различных тегов, что чертовски впечатляет, когдавы считаете, что в типичном словаре содержится около 75 000 записей "

Небольшое предупреждение: я обычно пишу Oracle SQL и предполагаю, что Data Explorer использует SQLServer, поэтому мои запросы могут быть немного любительскими.Во-первых, мои предположения о данных:

  • все, что перечислено в таблице тегов, является "главным тегом".
  • в таблице TagSynonyms, TargetTagName является "главным тегом", SourceTagName является«тег синонима».

Теперь к вашим конкретным запросам:

«Я предполагаю, что главный тег может иметь несколько тегов синонимов, но тег синонимов может быть толькосиноним для одного основного тега. Это правильно? "

select * from TagSynonyms where TargetTagName = 'javascript'

Результат: Да.Главный тег может иметь несколько тегов синонимов.

select SourceTagName, count(*) from TagSynonyms group by SourceTagName having count(*) > 1

Результат: Да.Тег синонима может быть синонимом только для одного основного тега.

"Кроме того, может ли главный тег также быть тегом синонима?"

select TagName from Tags
intersect
select SourceTagName from TagSynonyms

Результат: Да.Главный тег также может быть тегом синонима.Когда я выполнял этот запрос, было 465 тегов, которые были и синонимом, и мастером

«Как система работает с циклическими ссылками?»

Вот где моя логика /SQL может подвести меня.Вопрос в том, могу ли я найти какие-либо циркулярные ссылки?Чтобы сделать это, я думаю, мне нужно потренироваться:

  • Установить a - набор тегов, которые являются одновременно основными и синонимами
  • Установить b - синонимы для синонимов тегов в набореa
  • Set c - пересечение b

Все в множестве c будет круговой ссылкой.

Мы уже вычислили набор a выше (в нем 465 строк).

Set b - синонимы для синонимов множества a

select SourceTagName from TagSynonyms where TargetTagName in (
select SourceTagName from TagSynonyms where TargetTagName in (
select TagName from Tags
intersect
select SourceTagName from TagSynonyms
))

Результат: 0 строк

Мы можем остановиться здесь, естьнет смысла работать с множеством c, поскольку мы уже знаем, что множество b пусто.

Если я не ошибаюсь в своей логике или SQL (что очень возможно), кажется, что в StackOverflow нет циклических ссылок.Я полагаю, что существуют технические процессы для предотвращения циклических ссылок (в противном случае StackOverflow может пострадать от StackOverflow!).

...