我是初学者,我想问一些建议。
我目前正在建立一个平台,允许人们上传图像并标记它们。
我正在阅读一些具有以下结构的文章来存储标签
存储逻辑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,那么我的想法是不是很好?我应该担心将来有多少标签的加载时间?
谢谢
答案 0 :(得分:2)
我会选择第二个。我不担心加载时间。您可以轻松获取带连接的类别。
但是,您应该在关系表上添加一个id列,以便多个图像可以共享一个类别。
答案 1 :(得分:1)
在您的第二个示例中,您的relation table
应该有索引,这样当您根据特定的photo_id查找所有标记时,答案将会快速返回。
在relation
表中,tag_id
是标记表中的外键,photo_id
是照片表中的外键。标签可能与多张照片有关系,而照片可能与多个标签有关系。
同样,您的标签(和照片)的名称也应编入索引,以便快速搜索。