2012-04-03 1 views
0

У меня есть следующая ситуация в моем проекте. Существуют некоторые значения тегов, которые связаны с одной категорией.Эффективное хранение и поиск категорий для данных тегов

Пример:

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

Теперь, для этого я использую простую таблицу в базе данных с двумя колонками, Category, Tag, и я храню «Фрукты» в Category колонке и «Яблоко, банан, виноград» в Tag (каждый тег разделяется комой). И когда я запрашиваю одну категорию, используя простой оператор SQL, такой как select tag from TagsCollection where category='Fruits';, я получаю строку со всеми тегами, принадлежащими к категории «Фрукты». Обратите внимание, что таблица будет иметь только один экземпляр любой конкретной категории в качестве записи. И чем мне нужны все теги, которые нужно разделить для дальнейшей обработки, поэтому я разбил строку на комах на моем языке программирования (Java, здесь).

Теперь, что может быть идеальным способом реализовать что-то подобное? я перехожу к RDBMS-способу хранения (точнее, MySQL) или есть другой более быстрый способ хранения & для получения такого типа данных.

ответ

0

Ваш текущий проект нарушает первую нормальную форму, поскольку у вас есть несколько значений в одной строке одного столбца. Кроме того, любой запрос на значения тега, вероятно, будет работать плохо.

Нормированный дизайн сохранит Категорию и тегов столбцы, но будет иметь отдельную строку для каждой комбинации категории и категории - как так:

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

Я намеренно использовал атрибут многозначного игнорируя любые нормальные формы для надежды г и любое лучшее решение. Поэтому, сохраняя этот способ, я могу использовать что-то вроде HashTable для каждой категории на фронте программирования для эффективного сопоставления. Тем не менее, существует ли какой-либо способ без базы данных хранить такую ​​информацию? какой-то XML? (не знают о хранилищах на основе XML) – Kushal

0

Это зависит от ожидаемого размера базы данных, и TagsCollection в частности.

Вы можете выбрать дизайн РСУБД, если вы не ожидаете огромного количества записей (огромными значениями я имею в виду миллиарды записей и десятки или сотни запросов в секунду) или перейдите на систему NoSQL, одну из: