将标签存储在数据库中的最佳方式?
问题描述:
我有一个包含两个表的数据库:将标签存储在数据库中的最佳方式?
- 项
- 标签
条目表中包含的帖子,每个都有一个或多个标签。问题是,每个帖子可以有任意数量的标签。换句话说,我不能有'tag1','tag2'等列,并做一个LEFT JOIN。
我应该如何设置条目,以便每个帖子可以有任意数量的标签?
答
您需要一个映射表。
创建一个名为entries_tags
表包含两列:entry_id
和tag_id
,对两个条目多键。
这被称为多对多的关系。
答
你也可以做到这一点的SO-方式,这里除了到具有结/映射/交集表,你有那加标签条目的标签列表:
entries table:
post_id: 3539744, .... tags: sql, database, database-design, tags, data-modeling
如果您在为条目拉取相关标签时,不能使用联结表的性能。当然,在这里需要格外小心,因为你正在处理非规范化的数据。
是的,并确保没有条目重复标签。更新标签会有点棘手,因为您需要确保现有标签保持不变,添加新标签,删除标签。当然,你可以随时删除所有内容,然后重新添加它们以节省比较的麻烦。我会说优点和缺点。 – 2010-08-22 01:49:45
@ o.k.w:您可以通过外键约束和事务更新来处理所有这些问题。 – Borealid 2010-08-22 01:53:27
@ o.k.w:另外,两个列上的主键(首选)或唯一约束将确保每个组合的唯一性。 – 2010-08-22 01:57:02