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