代码之家  ›  专栏  ›  技术社区  ›  mercutio

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

  •  5
  • mercutio  · 技术社区  · 16 年前

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

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

    例如:用户配置文件照片、工作申请简历、CMS页面上的相关文档等。

    4 回复  |  直到 9 年前
        1
  •  3
  •   willeM_ Van Onsem    9 年前

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

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

    如果您将它们放在一个表中(并且希望允许用户拥有多张照片或简历),则需要两个链接表来关联文件->用户和文件->cms_页。可以说,这意味着HABTM关系,这是不正确的,允许不一致的数据。

    双表方法比较简单,只允许文件与具有简单belongsto关系的正确实体类型相关联。

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

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

        2
  •  2
  •   SCdF    16 年前

    根据您所说的,我将在一个地方存储带有随机(UUID或不带)文件名的文件。然后我会有一个“附件”表或包含对所有外部文件的引用的东西。这个表还包含该文件的元数据,所以它是什么类型的文件(picture、cv等)等等。

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

        3
  •  2
  •   samjudson    16 年前

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

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

    其次,安全性可能是一个问题——如果一些是公开的(例如,配置文件照片),而另一些不是公开的(例如,cvs),那么将它们放在不同的目录中更容易管理。

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

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

    但在一天结束时,这可能取决于数量和您自己的偏好。

        4
  •  2
  •   Jon Limjap    16 年前

    只有在为每种文件类型存储其他元数据(因此,还有其他列)时,每个文件类型的不同表才具有相关性。如果每个文件类型的表只包含相同的列(例如,文件名、文件类型、上载日期等),那么将它们全部放在一个表上是有意义的。