PHP& MySQL标记系统逻辑

时间:2014-06-05 15:00:13

标签: php html mysql data-structures tags

我是初学者,我想问一些建议。

我目前正在建立一个平台,允许人们上传图像并标记它们。

我正在阅读一些具有以下结构的文章来存储标签

存储逻辑1

| photo_id |     name     |            tags            |
|     1    |  some photo  | flower, sun. island, beach |
|     2    |  some photo2 | hawaii, travle. surf       |

很多人说这不是一个好主意

所以我的逻辑。

我正在阅读关于多对多关系,我想出了这个逻辑

标签表

| tag_id   |   name   |
-----------------------
|     1    |  flower  |
|     2    |  hawaii  |
|     3    |  surfing |
|     4    |  island  |
|     5    |  travel  |

照片表

| photo_id |     name     |
---------------------------
|     1    |  some photo  |
|     2    |  some photo2 |

关系表

| tag_id   |   photo_id   |
---------------------------
|     1    |       1      |
|     2    |       1      |
|     3    |       1      |
|     4    |       2      |
|     5    |       2      |

我选择使用Laravel framework来简化开发

但我的问题是逻辑2 而我害怕的是它会产生巨大的加载时间。

因为没有默认的基于用户的标签我想到了以下逻辑。

用户使用标签上传图片,在保存图片之前,检查实际标签是否存在,如果不保存,则返回tags_id并将其保存到photo_id

的关系表中

所以我有两个问题

  • 哪种逻辑更好,为什么?

  • 如果是逻辑2,那么我的想法是不是很好?我应该担心将来有多少标签的加载时间?

谢谢

2 个答案:

答案 0 :(得分:2)

我会选择第二个。我不担心加载时间。您可以轻松获取带连接的类别。

但是,您应该在关系表上添加一个id列,以便多个图像可以共享一个类别。

答案 1 :(得分:1)

在您的第二个示例中,您的relation table应该有索引,这样当您根据特定的photo_id查找所有标记时,答案将会快速返回。

另见Foreign Keys

relation表中,tag_id是标记表中的外键,photo_id是照片表中的外键。标签可能与多张照片有关系,而照片可能与多个标签有关系。

同样,您的标签(和照片)的名称也应编入索引,以便快速搜索。