【问题标题】:Database model to manage documents用于管理文档的数据库模型
【发布时间】:2018-06-09 21:44:43
【问题描述】:

我需要使用 sql server 2008 建立一个与管理 jpg、doc、msg、pdf 等文档相关的表格。

我知道 sql server 支持 .jpg 图片,所以我的问题是是否可以将其他类型的文件上传到数据库中。

这是一个表格示例(如果需要,可以重新定义)。

Document : document_id int(10)
           name        varchar(10)
           type        image (doesnt know how it might works)

这些是表格的初始值,但我不知道如何使它对任何类型都有用。

pd:我需要分配一个目录来将这些文档保存到服务器中吗?

【问题讨论】:

  • 不要使用 image 数据类型。它已经被弃用了一段时间(如果我没记错的话,从 2008 年开始)。而是使用varbinary
  • 比较安全的方法是将文件存放在文件服务器上,路径存放在db中。

标签: sql sql-server database data-modeling


【解决方案1】:

正确的数据库设计模式是将文件保存到 DBMS。您应该开发一种文件管理子系统来管理您所有项目的文件。

文件管理子系统
这个子系统应该是可重用、可扩展、安全等。您所有想要保存文件的项目都可以使用这个子系统。
文件可以保存在任何地方,例如本地硬盘网络驱动器外部驱动器云端 等等。所以这个子系统应该被设计成支持所有类型的请求。

(您可以通过添加许多功能来改进提到的子系统。例如检查重复文件,...)

这个子系统应该为每个文件生成一个唯一密钥。上传并保存文件后,子系统应生成该密钥。

现在,您可以使用此唯一密钥保存在数据库中(而不是文件)。每次如果要获取文件,可以从数据库中获取唯一键,并通过唯一键请求从子系统中获取文件。

【讨论】:

    【解决方案2】:

    使用文件流

    https://docs.microsoft.com/en-us/sql/relational-databases/blob/filestream-sql-server

    我知道仅链接的答案不是答案,但我不敢相信还没有人提到它

    【讨论】:

    • 是否只链接,这是最好的解决方案:它具有集成数据库管理(尤其是备份和恢复)的所有优点,同时处理人们(看似哲学上的)反对将文件存储在数据库中。
    【解决方案3】:

    您可以在 sql server 表中存储几乎任何文件类型...如果这样做,您几乎肯定会后悔。

    将元数据/指向文件的指针存储在数据库中,并将文件本身直接存储在它们所属的磁盘上。

    您的数据库大小 - 以及运行它所需的硬件 - 将非常迅速地增长,因此您将产生大量不必要的成本。

    【讨论】:

    • 大约有10个用户实际使用这个系统,全年大约有100个交易,大约100-1000个与jpg、doc、msg或pdf相关的文档。
    • 因此,即使您的流量和需求增加,它也可能会起作用,甚至可能会起作用很长一段时间——但我仍然认为它不是一个很好的解决方案;它会一直工作,直到它不再起作用为止。
    • 我必须同意 E.J.这就是我所说的 TBS(塔可钟解决方案)……似乎是个好主意,但很少。
    • 解决方案是通过 Intranet 的本地项目(如果文件连接在共享文件夹中,任何人都可以看到文件),这些是我收到的要求(我也同意这是一个 taco bell 解决方案)跨度>
    • 如果要求只是存储文档而不是其他任何东西,那么滚动我们自己的 Sharepoint 似乎没有什么价值。但如果应用程序将文档与其他结构化数据混合在一起,那就另当别论了。一个考虑因素是备份和恢复要求。与将数据库和文件系统恢复到一致点相比,恢复数据库要快得多且容易得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多