2010-11-09 132 views
1

假设两个人拥有相同的图像名称,或者同一用户两次上传同一图像,在数据库中唯一存储和图像名称的最佳方式是什么?我如何管理这样的scenerios,以便当我想执行更新,删除等操作时,我不会最终删除这两个图像或全部。我的数据库是MySQL。将图像存储在mysql数据库中

编辑 - 好了,现在由于某种原因,我会产生所有的图像都独特的时间戳在本地主机上运行,​​但是当我把它在线这是行不通的,我不能删除它,但它脱机运行良好。

谢谢 @cybeormin

回答

1

任何表中的我会建议一个ID列是自动增量,并设置为一次场。这样所有行都是唯一的,尽管用户有两个同名的图像。

0

在图像上添加一个refcount。当你想删除图像时,只需减少refcount。当引用计数达到0时,您将删除真实的行(或者使用cron作业将其删除)。

0

我会放弃原始图像名称,为每个图像提供一个唯一的ID并将原始名称存储在数据库中。

+0

我该怎么办? – Cyberomin 2010-11-09 12:32:19

+0

上传文件到一个临时目录,用“file_id,user_id,文件名”在数据库中插入一行,移动文件到yourFolder/$ file_id.jpg 不知何故...... – Simon 2010-11-09 12:35:04

+0

好吧,现在由于某种原因,我产生了一个独特的时间戳所有图像的一切工作本地主机,但是当我把它联机它不工作,我不能删除它,但它脱机工作很好。 – Cyberomin 2010-11-09 12:38:57

0

在你的MySQL数据库,创建一个表图像上载,创建一个ID列设置为AUTO_INCREMENTINT(整数),并使其成为PKEY(主密钥)。

这意味着您的ID始终会在添加新内容时自动创建并生成,并且始终是唯一的,无论相同图像是否添加了任何次数。

其他字段可以捕获其他图像信息(文件名,'给定'名称,文件大小,文件类型和图像本身的BLOB字段),然后你甚至可以添加一个伪装ID,综合因素......你应该认为合适。

0

将唯一密钥(主键)与每个条目相关联。例如:

fileId | file_name | file 

并将fileId设置为自动递增和主键。然后你可以在你的“用户”表上(如果你有类似的东西),只需将fileId引用为外键即可。

userId | ... | fileId | ... 

然后,如果您需要删除文件,只需使用fileId找到要删除的文件即可。