2012-04-03 7 views
0

J'ai une situation suivante dans mon projet. Certaines valeurs de tag sont associées à une seule catégorie.Stockage et récupération efficaces des données de catégorie à étiquettes

Exemple:

Fruits : Apple, Banana, Grape 
Vegetables: Tomato, Cabbage, Brinjal 

Maintenant, pour cela, j'utiliser une table simple dans la base de données avec deux colonnes, Category, Tag, et je magasin "Fruits" dans Category colonne et "Pomme, Banane, Raisin" en Tag colonne (chaque étiquette est séparée par une virgule). Et quand je demande une seule catégorie en utilisant une simple instruction SQL comme select tag from TagsCollection where category='Fruits'; je reçois une chaîne avec tous les tags qui appartiennent à la catégorie "Fruits". Notez que la table n'aura qu'une seule instance d'une catégorie particulière en tant qu'enregistrement. Et puis j'ai besoin que toutes les étiquettes soient séparées pour un traitement ultérieur, alors je divise la chaîne sur les comas dans mon langage de programmation (Java, ici). Maintenant, quel peut être un moyen idéal pour mettre en œuvre quelque chose comme ça? dois-je procéder avec RDBMS-façon de stockage (MySQL, pour être précis) ou est-il un autre moyen plus rapide pour stocker & récupérer un tel type de données.

Répondre

0

Votre conception actuelle viole la première forme normale, car vous avez plusieurs valeurs dans une seule ligne d'une seule colonne. En outre, toute requête sur les valeurs de tag est susceptible de mal fonctionner.

Une conception normalisée conserverait Catégorie et colonnes Tag, mais aurait une ligne distincte pour chaque combinaison de catégorie et Tag - comme ceci:

Category Tag 
Fruits Apple 
Fruits Banana 
Fruits Grape 
... 
+0

I intentionnellement utilisé attribut multi-valeur en ignorant toutes les formes normales pour l'espoir de g et toute meilleure solution. Pour que cela soit stocké de cette façon, je peux utiliser quelque chose comme HashTable pour chaque catégorie sur le front de programmation pour une correspondance efficace. Cependant, y a-t-il un moyen non-base de données pour stocker des informations comme celle-ci? une sorte de XML? (pas conscient des stockages basés sur XML) – Kushal

0

Cela dépend de la taille attendue de votre base de données et TagsCollection table en particulier.

Vous pouvez choisir la conception RDBMS au cas où vous n'attendez pas un grand nombre d'enregistrements (en gros, je veux dire des milliards d'enregistrements et des dizaines ou des centaines de requêtes par seconde), ou opter pour le système NoSQL:

Questions connexes