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

Database design 什么时候文件只是一个文件?,database-design,Database Design,因此,在编写web应用程序时,用户可以在网站的多个区域上载文件。我的基本工作方法是将实际文件存储在服务器上,并有一个数据库表将存储的文件名连接到与其相关的记录 我的问题是:每个“类型”的文件是否应该有不同的表?此外,文件应该存储在服务器上与上下文相关的位置,还是一起存储 一些例子:用户档案照片、求职简历、CMS页面上的相关文档等。根据您所说,我只会将带有随机(UUID或其他)文件名的文件存储在一个地方。然后我会有一个“附件”表或包含所有外部文件引用的东西。此表还将包含该文件的元数据,以及该文件的

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

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


一些例子:用户档案照片、求职简历、CMS页面上的相关文档等。

根据您所说,我只会将带有随机(UUID或其他)文件名的文件存储在一个地方。然后我会有一个“附件”表或包含所有外部文件引用的东西。此表还将包含该文件的元数据,以及该文件的类型(图片、CV等),等等


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

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

首先,限制一个目录中的文件数量可能是一个考虑因素

第二,安全性可能是一个问题-如果一些是公开查看的(例如个人资料照片),而另一些不是(例如CVs),那么将它们放在不同的目录中会更容易管理

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

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


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

只有在您为每种类型的文件存储其他元数据(以及其他列)时,每种文件类型的不同表才具有相关性。如果每种文件类型的表只包含相同的列(例如,filename、filetype、dateupload等),那么将它们全部放在一个表中是有意义的。

从您的示例中,有一个参数用于两个表,因为您有可以与两个不同内容关联的文件

  • CVs、照片与用户关联
  • 附件与CMS页面相关联
如果您将这些内容放在一个表中,(并且您希望允许用户拥有多张照片或cv),那么您需要两个链接表来关联文件->用户和文件->cms\U页面。可以说,这意味着HABTM关系不正确,允许数据不一致

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

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

还要确保存储或能够计算每个文件的mimetype,以便能够使用正确的HTTP头将其正确地发送回浏览器