2011-08-30 5 views
10

I asked this question on meta하지만 이제는 태깅 기반 시스템과 관련된 일반적인 질문이므로 주 사이트에 더 적합 할 수 있음을 알게되었습니다. (이 질문을 사람들이 어디에 있어야한다고 생각 하느냐에 따라 닫고 기꺼이 삭제할 수 있습니다.태그 및 태그 동의어에 사용되는 데이터 모델은 무엇입니까?


내가 태그 데이터의 유사한 시스템을 가지고 SOF가 그랬던 것처럼 난 정말 같은 일이다 태그 많이 가지고 어디에서 같은 문제로 실행하고) 이동합니다. 이 정보를 구성 할 수 있도록 SOF와 유사한 태그 동의어 페이지를 만들려고합니다.

관계와 태그 동의어의 "데이터 모델"주위에 몇 가지 질문 :

나는 마스터 태그가 여러 동의어 태그를 가질 수 있지만, 동의어 태그는 하나 개의 마스터 태그에 대한 동의어가 될 수 있다고 가정합니다. 그 맞습니까?

또한 마스터 태그는 동의어 태그 일 수 있습니까? 예를 들어, 태그를 호출했다 말할 수 자바 스크립트 당신은 있었다 :

마스터 : JS
동의어 : 자바 스크립트, JS-웹

당신도 가질 수 있습니다

마스터 : 자바 스크립트
동의어 : JS

위 예제에서 js-web ~ javacript을 마스터 태그 : js 자체가 동의어 태그이기 때문에 궁극적으로 해결할 것입니다. JS
동의어 : 자바 스크립트

당신이

마스터이 곳 저를 당신은 또한 순환 참조로 실행할 수 있습니다 생각하게 또한

, 강사 : javascript
동의어 : js

시스템은 순환 참조를 어떻게 처리합니까?

+0

스키마가없는 NoSQL DB는이 데이터 모델 문제에 유연합니다. 체크 아웃 mongodb.org – InspiredJW

+0

루프와 체인 일종의 까다로운 ...이 간단한 일을 완전히 루프와 체인을 처음부터 금지하고 있습니다 ... –

답변

15

folksonomies, polysemy 등에 관한 메타에 대한보다 이론적 인 답을 얻으 려합니다. StackOverflow 측에 답하고 있기 때문에 기술적으로 좀 더 답을 줄 것입니다. StackOverflow Data Explorer을 사용하여 쿼리를 실행하면 귀하의 질문에 답변 할 수 있습니다 (StackOverflow와 제휴 관계가 아니므로 잘 모릅니다).

StackOverflow에서 마스터/동의어 태그 관계는 신중하게 stewarded이며 재배됩니다.데이터 탐색기에서 글을 쓰는 시점 :

  • 태그
  • TagSynonyms 1916 행

이 다른 폭소노미와 대조 흥미를 가지고 29488 행, 하나 개의 기사 "Technorati tags: Good idea, terrible implementation"상태가 있습니다.

, 나는 보통 오라클 SQL 쓰기

빠른주의와 '테크노은 이제 일반적인 사전은 약 75,000 항목이 있음을 고려할 때 무척 인상적이다 466951 개 다른 태그를 추적하고 있음을 알립니다 " 데이터 익스플로러가 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이 나를 실망시킬 수있는 곳입니다. 질문은 순환 참조를 찾을 수 있습니까? 설정

  • 설정 C의 태그의 동의어 동의어 - 마스터 및 동의어
  • 설정 B에서 태그의 설정 - 설정

    • 을을 이렇게하려면 내가 해결해야한다고 생각 - 교차점 b

    집합 C의 모든 것은 순환 참조가됩니다.

    우리는 이미 위 집합 (465 개의 행이 있음)을 계산했습니다.

    설정 B - 설정

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

    결과의 동의어 동의어 : 0 행

    우리는 여기 중지 할 수 있습니다, 우리는 이미 설정 B를 알고있는 세트 C를 작업 아무 소용이 없다 비었다.

    내 논리 또는 SQL을 잘못 (매우 가능)하지 않는 한 StackOverflow에 순환 참조가없는 것 같습니다. 순환 참조가 발생하지 않도록 기술적 인 프로세스가 있다고 생각합니다 (그렇지 않으면 StackOverflow가 StackOverflow를 겪을 수 있습니다!).

  • 관련 문제