这可能是一个非常简单的问题,但只是确保。我正在设计一个数据库模式,一些表应该链接到文件系统上的文件(PDF、PPT 等)。
这应该怎么做?
我最初的想法是 varchar(255) 与文件的绝对/相对路径。有一个更好的方法吗?我在网上搜索并找到了 varbinary(max),但不确定这是否是我真正想要的;我不希望实际将任何二进制文件加载到数据库中,只是为了有一个指向文件的指针。
这取决于操作系统和有效路径的最大长度。您所说的“指针”只是一个带有文件路径的文本字段,因此与其他字符数据没有什么不同。
我通常会存储相对路径,并在我的应用程序中指定根文件夹。例如,通过这种方式,您可以将文件移动到不同的驱动器,而不必更新数据库中的行。
您选择的实际数据类型取决于您使用的 dbms。一些数据库还为您可能想要探索的文件提供特定的数据类型,例如FileStream
SQL Server 2008 中引入的数据类型。
您需要在数据库中存储文件的名称,以及它的路径,对吗?然后您应该使用 varchar(255) 创建一个字段。我一直这样使用,从来没有遇到过问题。希望它有所帮助。
如果您不想将文件的二进制数据存储在数据库中,那么存储路径是唯一的方法。存储绝对路径还是相对路径取决于您。
是的,基本上就是这样。在 Db 中配置为参数的某个位置的相对路径是它的常用方式。除了获得回合长度限制。
如果您说 C:MySystem\MyData 作为基本路径。然后你可以做 Images\MyImageFile.jpg、Docs\MyDopc.pdf 等。
请注意对备份和还原的影响。你必须做数据库和文件系统。
另一个可能的考虑因素是文件名必须是唯一的。所以你如果 Fred 和 Wilma 都上传 Picture1.jpg,db 没问题,但文件系统会被塞满。通常的方法是有一个用户文件名和一个实际文件名。
所以 Fred 的 Picture1.jpg 实际上是 p000004566.jpg
不要忘记添加代码来处理您认为应该存在的文件已被某些 twit 删除。
此外,在极不可能发生编码错误的情况下,整理孤立文件的某种管理任务也可能是有序的。:)
此外,如果文件的路径可由软件配置,请确保检查将执行该工作的帐户是否具有读写访问权限,可能还希望使用 UNC 路径,但不要让自己背负映射驱动器。