高效存储&检索类别到标签数据

时间:2012-04-03 12:08:42

标签: sql tagging key-value

我的项目中有以下情况。有一些标记值与单个类别相关联。

示例:

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

现在,为此,我在数据库中使用了一个简单的表格,其中有两列CategoryTag,我将“Fruits”存储在Category列和“Apple,Banana,Grape”中“在Tag列中(每个标记用逗号分隔)。当我使用像select tag from TagsCollection where category='Fruits';之类的简单SQL语句查询单个类别时,我得到一个包含属于“Fruits”类别的所有标记的字符串。请注意,该表将只有任何特定类别的单个实例作为记录。而且我需要将所有标签分开以进行进一步处理,因此我使用我的编程语言(Java,这里)将字符串拆分为comas。

现在,实现这样的事情的理想方法是什么?我是否继续使用RDBMS存储方式(确切地说是MySQL),还是有任何其他更快的方式来存储&检索这种类型的数据。

2 个答案:

答案 0 :(得分:0)

您当前的设计违反了第一范式,因为您在单个列的单行中有多个值。此外,对标记值的任何查询都可能表现不佳。

标准化设计会保留Category和Tag列,但对于Category和Tag的每个组合都会有一个单独的行 - 如下所示:

Category  Tag
Fruits    Apple
Fruits    Banana
Fruits    Grape
...

答案 1 :(得分:0)

这取决于数据库的预期大小,特别是TagsCollection表。

你可以选择RDBMS设计,以防万一你不想要大量的记录(我的意思是数十亿的记录,每秒数十或数百个查询),或者选择NoSQL系统,其中一个: