我的项目中有以下情况。有一些标记值与单个类别相关联。
示例:
Fruits : Apple, Banana, Grape
Vegetables: Tomato, Cabbage, Brinjal
现在,为此,我在数据库中使用了一个简单的表格,其中有两列Category
,Tag
,我将“Fruits”存储在Category
列和“Apple,Banana,Grape”中“在Tag
列中(每个标记用逗号分隔)。当我使用像select tag from TagsCollection where category='Fruits';
之类的简单SQL语句查询单个类别时,我得到一个包含属于“Fruits”类别的所有标记的字符串。请注意,该表将只有任何特定类别的单个实例作为记录。而且我需要将所有标签分开以进行进一步处理,因此我使用我的编程语言(Java,这里)将字符串拆分为comas。
现在,实现这样的事情的理想方法是什么?我是否继续使用RDBMS存储方式(确切地说是MySQL),还是有任何其他更快的方式来存储&检索这种类型的数据。
答案 0 :(得分:0)
您当前的设计违反了第一范式,因为您在单个列的单行中有多个值。此外,对标记值的任何查询都可能表现不佳。
标准化设计会保留Category和Tag列,但对于Category和Tag的每个组合都会有一个单独的行 - 如下所示:
Category Tag
Fruits Apple
Fruits Banana
Fruits Grape
...
答案 1 :(得分:0)
这取决于数据库的预期大小,特别是TagsCollection表。
你可以选择RDBMS设计,以防万一你不想要大量的记录(我的意思是数十亿的记录,每秒数十或数百个查询),或者选择NoSQL系统,其中一个: