2011-11-07 2 views
2

J'ai une question application Web qui permet aux utilisateurs de poser des questions sur des choses spécifiques. Je développe un étiquetage de style de tag pour chaque question, tout comme le débordement de pile. Quand j'associe chaque article avec des catégories ou des tags, je me demandais quelle est la meilleure façon de stocker cela. -Créer une colonne dans la base de données sql pour stocker un objet json sérialisé ou simplement une ligne séparée par une virgule avec les ID des catégories que la question concerne.Meilleure façon de stocker des balises ou des catégories comme Stack Overflow

Je pense qu'avec cette approche, il sera difficile de rechercher des questions en fonction d'un tag spécifique car il devra analyser la colonne des catégories pour chaque question qui semble ne pas être idéale. Quel est un bon moyen d'architecturer cette fonctionnalité pour qu'elle corresponde bien à la recherche, tout en gardant le schéma assez simple (gardez à l'esprit que mon objectif principal est de rendre les tags aussi similaires que possible à stackoverflow)?

+3

Notez que cette question a très peu de chose à voir avec C# ou ASP.NET, ce qui est plus sur la conception de base de données. Pour cela, je dis qu'une question peut avoir plusieurs tags. 1 tag peut avoir beaucoup de questions. Par conséquent, vous seriez bien servi avec un schéma de données pour refléter cette relation plusieurs à plusieurs. 1: M: 1. –

+0

merci, je vais certainement me souvenir d'étiqueter les choses mieux! – anthonypliu

Répondre

6

Eh bien, pour le garder simplement pourquoi ne pas simplement suivre l'approche normalisée avec trois tableaux:

Questiond (Qid, nom)

Tag (TagId, nom)

Tag-per-sujet (qid, TagId)

très simple ....

+0

KISS principe .. – JonH

+0

Me battre à elle .. – mrkmg

+0

quand je commence à avoir des millions de questions avec des balises associées à tout cela, la base de données ne sera-t-elle pas très grande? cela compte-t-il? – anthonypliu

1

La meilleure façon de le faire est avec les clés étrangères.

Avoir une table qui stocke la question/l'élément avec son ID unique. (ID_élément, info1, info2, info3 ...)

Avoir une autre table qui stocke toutes les étiquettes possibles et leur ID unique. (tag_ID, tag_name)

Avoir une dernière table qui relie les deux ensemble. (ID_élément, ID_tiquette)

0

Chaque article aurait un ID dans une table avec ce que vous prévoyez d'inclure. Appelons-les «messages». Chaque balise de publication se trouve dans une autre table avec post_id et le tag (et toutes les colonnes d'audit que vous pourriez aimer) "post_tags". Vous, en tant qu'administrateur, pouvez ensuite (facultativement) ajouter des enregistrements à une table de recherche 'tags' pour les tags qui sont assez populaires pour que vous souhaitiez les définir correctement, un https://stackoverflow.com/tags/asp.net/info.

1

juste une relation simple many-to-many?

Par exemple:

table: [questions] 
[TableId][name] 
'1' - 'general' 

table: [Tags] 
[TagId][name] 
'99' - 'c#' 

table: [QuestionsTagged] 
[TableId][TagId] 
'1' - '99' 

redirigent ensuite ensemble avec foreign key constraints

Questions connexes