0

我需要将标签系统添加到我的一个网站。

现在我正在编码这样的东西:

标签表

创建表`tags_table`(
`id` int(15) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`seo_url` varchar(50) NOT NULL,
主键(`id`)

files_table 有“标签”字段 [varchar(250)]

当我添加新标签时:

  • 我列出 tags_table 中的所有标签并选择我想要的标签
  • 我将标签名称保存到 files_table.tags -> 逗号分隔值

这样更容易显示文件标签。

当我编辑文件时: - 选择/取消选择标签并再次保存。

不同表格的方法二:

  • 我知道我可以制作像 tags_files 这样的单独表格并放入 tag_id 和 file_id

但是当我编辑文件时,我如何检查为该文件添加或删除了哪些标签?

什么更有效率?

字段或不同表中的逗号分隔值?

此外,当我编辑标签名称或删除标签时,也应该对所有文件进行更改。

4

2 回答 2

2

不要使用逗号分隔值。它们的查询速度往往较慢。一个例外可能是如果您使用 FULLTEXT 索引并使用 MySQL 进行 MATCH,但是您将自己绑定到特定的 DBMS特定的存储引擎 (MyISAM)。

如果您有一个带有标签的单独表和一个将标签 ID 链接到文件的链接表,那么您将拥有以下优势:

  • 删除标签就像从链接表中删除所有具有该 id 的记录,然后删除标签记录一样简单。
  • 重命名标签只是一次更新。
  • 您可以轻松查询可用标签列表并快速计数以查看它使用的频率。
  • 防止您删除仍在使用的标签的参照完整性(外键)。
  • 比使用“LIKE”或其他方式查找与标签匹配的文件更快的查询。
  • 可能还有更多。
于 2012-10-13T11:44:50.180 回答
0

根据您的要求,您需要:

  1. 对所有文件进行的更改
  2. 效率

我强烈建议使用单独的表进行存储tags_files,因为您可以简单地从文件中添加或删除标签,但在表中删除或添加新条目tags_files

逗号分隔的方法不好,原因如下:

  1. 对于每个更改,您都将编辑文件标签中的行。
  2. 搜索将更加困难,因为您将无法利用 MySQL 搜索功能,并且您将被迫使用可能效率不高的字符串搜索。
于 2012-10-13T11:44:05.577 回答