我正在开发一个网站,其中包含不同部分的大量图片。例如,将有用户照片和文章照片。我想将所有媒体合并到一个媒体数据库表中,并根据上传日期存储图像:
id: 1564
name: 55821325202772db75de084b2919cabb (hashed)
path: images/2011/07/01/
date: 01-07-2011
ext: jpg
type: image
rtype: news (relation type)
rid: 153 (relation parent id)
如果我需要链接到新闻帖子153的所有图像,我需要查询数据库中的特定rtype并删除。
这是存储网站媒体的好方法吗?
编辑:如果我将rtype和rid合并到1(哈希)列中,这会导致更快的查询吗?
答案 0 :(得分:1)
这是以前在Ruby on Rails框架中的方式。我想你也可以在php中遵循这种方式。
您可以看到有关如何将评论与多个对象关联的RoR示例:http://asciicasts.com/episodes/154-polymorphic-association
您还可以从cakePHP面包店查看这篇文章:http://bakery.cakephp.org/articles/AD7six/2008/03/13/polymorphic-behavior
答案 1 :(得分:1)
我认为这样可行,而且很灵活。一个小的缺点是你不能拥有从媒体到新闻帖子的外键,所以你没有得到参照完整性。 (你可能最终得到孤立的媒体文件。)如果这是一个问题,你可以从媒体到可能使用它的所有表的可空链接,以及一个约束,说明其中一个链接必须是非空的。
答案 2 :(得分:0)
这似乎是一种非常实用的方法。
答案 3 :(得分:0)
如果您需要真正的 HIGH 效果,可以尝试Redis。
对于此问题,您可以尝试hash
:
添加新项目:
hset id:1564 name 55821325202772db75de084b2919cabb
hset id:1564 path images/2011/07/01/
hset id:1564 date 01-07-2011
hset id:1564 ext jpg
hset id:1564 type image
hset id:1564 rtype news
hset id:1564 rid 153
读取id 1564的路径:
hget id:1564 path
阅读所有密钥:
hgetall id:1564
Redis工作非常快(比memchached快100多倍),并且所有数据都将备份到磁盘(异步),因此即使重启后您的数据也不会丢失。 RAM的大小应足以存储您的数据库,但请确保 - Redis可以非常有效地处理内存。