图片&标签 - 数据库设计问题

时间:2010-07-31 15:43:27

标签: mysql database database-design

我有3张桌子可以让我获得一些图片的所有标签,或者所有带有特定标签的图片。

我还想知道每个标签的存在次数。我如何使用MySQL获取此信息?

是否值得在Tags表中添加“计数”列来保存此信息?

文件表

File ID    File Name    ...
-------    ---------
   1         a.jpg      ...
   2         b.png      ...
   3         c.jpg      ...
   .           .
   .           .
   .           .

标签表

Tag Name    Tag Creator     ...
--------    -----------  
 David        david         ...
 2010         julia         ...
   .            .
   .            .
   .            .

FilesTags表

File ID    Tag Name
-------    --------  
   1        2010
   1        April
   1        David
   2        2010
   2        Julia
   3        Friends
   .          .
   .          .
   .          .

3 个答案:

答案 0 :(得分:4)

SELECT FilesTags.Tag_name, COUNT(*) as number_of_occurences
FROM FilesTags
GROUP BY FilesTags.Tag_name;

答案 1 :(得分:3)

Zaki's response回答了您的一个问题,而不回答了另一个问题。

  

“是否值得添加”计数“列   到Tags表来保存这个信息?“

这实际上取决于你将如何处理这些计数。而这又取决于您网站的性质。

SO会显示标签旁边的计数;这部分是因为它的目标受众是极客和极客喜欢数字。但是,在标记问题时,计数也是有用的信息。另外还有要考虑的Taxonomist徽章,以及版主页面上新标签的显示。换句话说,计数上有很多调用,因此对每个标记保持和维持计数是有意义的。

其他网站不会从标签中提取几乎同样多的果汁。但是,举个例子,假设您要显示tag cloud;您可能希望每次渲染时都避免计算FileTags中的所有条目。拿着计数将是一个帮助。

但请记住,写作可能很昂贵。因此,在决定存储它们之前,要清楚地知道您将如何处理这些计数。异步维护它们,也许是在批量工作中,这将是一个好主意。

答案 2 :(得分:1)

要查找标签“ABC”发生的次数,请执行

SELECT COUNT(*)FROM FilesTags表WHERE标记名称=“ABC”;

希望这有帮助。