2014-08-27 66 views
1

我正试图在我的应用中实现一个简单的标记系统。当用户想要标记对象时,他们可以使用现有的标签和/或同时创建新的标签。我有一个表格“标签”,它将唯一的标签字符串值存储为PK。在'object_tag'中,我有一个FK参考这个专栏。在来自客户端的请求中,可以有一个对象的多个标签。在服务器上,我将遍历所有标签并将它们存储在'object_tag'中。如果标签不存在于'标签'表中,则应该先插入。如果没有找到,在参考表中添加记录的最佳方法

什么是最有效的方法来做到这一点?我可以在每次插入之前检查标记是否存在,但是我想最小化数据库I/O。

+0

相关:http://stackoverflow.com/questions/334183/what-is-the-most-efficient-way-to-store-tags-in-a-database – Adrian 2014-08-27 11:03:29

+0

相关:http://stackoverflow.com/questions/17619698/good-way-to-store-tags-in-relational-database-when-there-are-variable-numbers-of – Adrian 2014-08-27 11:04:16

+0

相关:http:// meta。 stackexchange.com/questions/100017/how-have-tags-been-stored-in-the-stack-overflow-database-design – Adrian 2014-08-27 11:05:58

回答

0

您将需要3个表如下:

对象 - 对象列表,主键OID 标签 - 标签列表,主键TID ObjectTag - 对OID,TID值

参见:

Tags: Database schemas

的问题:你想拥有一个数据库架构,你可以标记一个 书签(或博客文章或其他)与尽可能多的标签,你想要的。 之后,您希望运行查询来将书签约束为 联合或交叉标签。您还希望从搜索结果中排除(例如:减号) 一些标签。

  • MySQLicious” 的解决方案 - 使用一个非规范化的表。 MySQLicious将del.icio.us数据导入具有此结构的表中。
  • “Scuttle”解决方案 - Scuttle将其数据组织在两个表格中。该表“scCategories”是“标签”表,并且已经获得了“书签”表的外键。
  • “Toxi Solution”Toxi想出了一个三表结构。通过表格“标签地图”,书签和标签是相互关联的。每个标签可以使用 连同不同的书签,反之亦然。该DB模式是wordpress也使用的 。

也看到Tagging system: Toxi solution questions

+0

是的,这就是我的数据库的外观。我的问题是如何有效地将对象标签插入到数据库中。当我添加对象标签时,我不知道标签本身是否存在于标签表中,因此我必须在每次插入之前检查每个标签是否存在。有没有办法解决这个问题,所以我不必每次都检查一下? – 2014-08-27 14:24:55

相关问题