在数据库中存储标签.存储标签一次或多次?

Ros*_*oss 7 mysql sql database

我想更详细地说明在数据库中存储标签的toxi方法 - 在SO上的其他地方提到过.

数据库架构是:

Table: Item
Columns: ItemID, Title, Content

Table: Tag
Columns: TagID, Title

Table: ItemTag
Columns: ItemID, TagID
Run Code Online (Sandbox Code Playgroud)

这可能是一个愚蠢的问题(但我不知道答案)...表标签中的每个条目都应该有一个唯一的标题.即我只存储一次标签或每次使用它时存储它?

为了说明,我最终应该得到以下两个表中的哪一个:

TagID     Title
1         Fish
2         Cat
3         Dog
Run Code Online (Sandbox Code Playgroud)

要么

TagID     Title
1         Fish
2         Fish
3         Cat
4         Fish
5         Dog
6         Cat
Run Code Online (Sandbox Code Playgroud)

如果使用第一个表,在输入标签之前我首先必须运行和sql语句来查明它是否存在,对吗?

任何帮助将不胜感激.由于黑客攻击和索引,我最近手指烧伤,想要开始正确的基础知识.

Eim*_*tas 4

基础知识是您需要存储像第一种情况中显示的标签。它有利于检查标签是否存在(因为在第二种情况下,对于现有标签,您的数据库将返回与标签出现的行数一样多的行),并且有利于按标签检索项目(通过一个标签 ID 选择项目 id 比选择项目更好) ids 由一组具有相同表示意义的 tag_id 组成)。

如果你因为索引而烧伤了手指 - 你应该总是检查查询是如何执行的(对于 mysql 来说是这样EXPLAIN/DESCRIBE SELECT)。