在SQL中管理图片标签

Mis*_*hko 3 mysql sql database database-design

我想建立一个图片数据库.每个图片可以具有1个或多个标签,例如:Paris,April 2010,David.

你会如何存储这些信息?我想有一个Files每个文件有一行的表,其中一列是用逗号分隔的标签ID,例如:2,4,14,15

在其他表中,Tags我认为每个标签有1行,如下所示:

Tag ID    Tag Name
------    --------
   1       April
   2       David
   3       Paris
Run Code Online (Sandbox Code Playgroud)

您认为管理这样的标签是个好主意吗?例如,如何轻松获取特定图片的所有标签名称?

Fos*_*sco 11

你应该有3个表.文件,标签和文件标签.

FileTags应具有文件ID和标签ID.一行用于一个标签分配.

然后,您可以使用特定标记轻松查询所有文件:

select distinct f.* from Files f 
join FileTags ft on f.FileID = ft.FileID 
join Tags t on ft.TagID = t.TagID
where t.TagName = 'Paris'
Run Code Online (Sandbox Code Playgroud)

或者任何文件的所有标签:

select distinct t.* from Files f 
join FileTags ft on f.FileID = ft.FileID 
join Tags t on ft.TagID = t.TagID
where f.FileID = 7
Run Code Online (Sandbox Code Playgroud)

  • 是的,一个经典的Many-To-Manu关系.阅读:http://www.tekstenuitleg.net/en/articles/software/database-design-tutorial/many-to-many.html和http://www.tomjewett.com/dbdesign/dbdesign.php?page = manymany.php (2认同)