Si è tentati di darvi una risposta più teorica sulla meta riguardante le folksonomie, la polisemia e così via! Dal momento che sto rispondendo sul lato StackOverflow proverò a dare una risposta leggermente più tecnica. L'esecuzione di query utilizzando lo StackOverflow Data Explorer mi consentirà di tentare di rispondere alle tue domande (non sono affiliato con StackOverflow quindi non posso saperlo con certezza).
Su StackOverflow la relazione del tag principale/sinonimo è attentamente stewarded e coltivata.Al momento della scrittura dal Data Explorer:
- Tag ha 29488 righe
- TagSynonyms ha 1916 file
E 'interessante per contrastare questo con altri folksonomies, un articolo "Technorati tags: Good idea, terrible implementation" stati.
"Technorati pubblicizza che stanno ora tracciamento 466,951 diversi tag, che è maledettamente impressionante se si considera che un dizionario tipico ha circa 75.000 voci"
un avvertimento rapido, io di solito scrivo Oracle SQL e Presumo che Data Explorer stia utilizzando SQLServer, quindi le mie query potrebbero essere un po 'amatoriali. In primo luogo le mie presunzioni sui dati:
- qualsiasi cosa elencata nella tabella Tag è un "tag principale".
- nella tabella TagSynonyms, TargetTagName è un "tag principale", SourceTagName è il "tag del dizionario".
Ora per le vostre specifiche richieste:
"Suppongo che un tag master può avere più tag sinonimo, ma un tag sinonimo può essere solo sinonimo di tag un master E 'corretto?"
select * from TagSynonyms where TargetTagName = 'javascript'
Risultato: Sì. Un tag principale può avere più tag di sinonimi.
select SourceTagName, count(*) from TagSynonyms group by SourceTagName having count(*) > 1
Risultato: Sì. Un tag sinonimo può essere solo un sinonimo per un tag principale.
"Inoltre, un tag principale può anche essere un tag di sinonimi?"
select TagName from Tags
intersect
select SourceTagName from TagSynonyms
Risultato: Sì. Un tag principale può anche essere un tag di sinonimi. Quando ho eseguito questa query c'erano 465 tag che erano entrambi sinonimi e master
"Come si gestisce il sistema con riferimenti circolari?"
È qui che la mia logica/SQL può deludermi. La domanda è: posso trovare riferimenti circolari? Per fare questo penso che ho bisogno di lavorare fuori:
- Impostare un - set di tag che sono sia maestro e sinonimi
- Set B - sinonimi di sinonimi dei tag della serie A
- Set c - un incrocio b
Qualsiasi cosa nel set c sarebbe un riferimento circolare.
Abbiamo già calcolato una sopra (ha 465 righe).
Set B - sinonimi dei sinonimi di impostare un
select SourceTagName from TagSynonyms where TargetTagName in (
select SourceTagName from TagSynonyms where TargetTagName in (
select TagName from Tags
intersect
select SourceTagName from TagSynonyms
))
Risultato: 0 righe
possiamo fermarci qui, non v'è alcun punto di lavoro insieme C come già sappiamo SET B è vuoto.
A meno che non abbia sbagliato la logica o l'SQL (il che è molto probabile) sembra che non vi siano riferimenti circolari in StackOverflow. Immagino che ci siano processi tecnici in atto per impedire che avvengano riferimenti circolari (altrimenti StackOverflow potrebbe soffrire di StackOverflow!).
Schemaless I DB NoSQL sono flessibili con questi problemi relativi al modello di dati. Controlla mongodb.org – InspiredJW
loop e catene sono un po 'complicati ... questa cosa più semplice da fare è totalmente non consentire loop e catene all'inizio ... –