什么时候文件只是一个文件?

When is a file just a file?

提问人:mercutio 提问时间:8/20/2008 最后编辑:Chrismercutio 更新时间:10/8/2015 访问量:303

问:

因此,您正在编写一个 Web 应用程序,并且您有网站的多个区域可供用户上传文件。我的基本工作方法是将实际文件存储在服务器上,并有一个数据库表将存储的文件名连接到与之相关的记录。

我的问题是:每个“类型”的文件都应该有一个不同的表吗?此外,文件应该存储在服务器上与上下文相关的位置,还是一起存储?

例如:用户个人资料照片、工作申请简历、CMS页面上的相关文档等。

数据库设计

评论


答:

2赞 SCdF 8/20/2008 #1

从你所说的,我只会将具有随机(UUID 或其他)文件名的文件存储在一个地方。然后,我将有一个“附件”表或包含对所有外部文件的引用的内容。此表还将包含该文件的元数据,因此它是什么类型的文件(图片、简历等)等等。

但是,一个目录中的文件数量可能有硬性限制,具体取决于您使用的 FS。

2赞 samjudson 8/20/2008 #2

将不同的文件存储在不同的位置可能有多种原因。

首先,可能要考虑限制一个目录中的文件数。

其次,安全性可能是一个问题 - 如果某些是公开可见的(例如个人资料照片),而另一些则不是(例如简历),那么将它们放在不同的目录中会更容易管理。

第三,如果拆分文件,例如在文件资源管理器中浏览,或管理备份,或修改应用程序以在多个位置拆分文件存储,则简单的管理任务可能会更容易。

还存在文件名冲突的问题,但是如果您重命名所有内容以匹配数据库 id 字段(例如),那么这不会成为问题。

但归根结底,这可能取决于数量和您自己的喜好。

2赞 Jon Limjap 8/20/2008 #3

仅当存储每种文件类型的其他元数据(以及附加列)时,每种文件类型的不同表才变得相关。如果每种文件类型的表仅包含相同的列(例如,文件名、文件类型、日期上传等),那么将它们全部放在一个表上是有意义的。

3赞 Cheekysoft 8/20/2008 #4

从您的示例中,有两个表的参数,因为您的文件可以与两个不同的事物相关联。

  • 简历、照片与用户相关联。
  • 附件与 CMS 页面相关联。

如果你把它们放在一个表格中,(并且你希望允许用户拥有多张照片或简历),那么你需要两个链接表来关联 files->users 和 files->cms_pages。可以说,这意味着 HABTM 关系,这是不正确的,并且允许不一致的数据。

双表方法稍微简洁一些,只允许文件与具有简单 belongsTo 关系的正确类型的实体相关联。

但我认为这个问题没有任何“正确”的答案,除非您需要为不同的文件类型存储不同类型的元数据。

此外,请确保存储或能够计算每个文件的 mimetype,以便可以使用正确的 HTTP 标头将其正确地提供给浏览器。


上一个:Python 简介 [已结束]

下一个:存储库组织