背景资料
我正在处理一个项目,该项目的文件路径字段是“一对一”关系(发票对象只允许一个文件)或“一对多”关系( claim 对象有许多文件可以加进去)。
到目前为止我有什么
我目前有两个想法。
1) 所有文件的一个数据库
我有一个[声明]数据库
Claim (PK) --- Name --- Address
1 Joe Some Place
我有一个[发票]数据库
Invoice (PK) --- Vendor --- FilePathID
100 12 1
还有一个[附件]数据库
UID (PK) --- Claim --- Description --- FilePath
1 NULL Invoice path\to\invoice
2 1 Receipt path\to\receipt
3 1 Image path\to\image
这将按以下方式工作:
[Invoice] 文件将在 [Invoice] 对象中明确定义(在本例中为 [Attachment] ID 1)。然后文件将通过“附件”数据库中的链接号(在上述情况下为 claim 1)附加到 [ claim ] 对象。通过这种方式,我们可以进行查询以列出 [Claim] 的所有附件,但同时将 [Invoice] 文件保存在同一个 [Attachments] 数据库中,该数据库由文件的 UID 号链接。这允许将所有上传映射到一个数据库中。
我对这种方法唯一担心的是,在为 [Invoice] 上传的文件中,Claim 字段保留为 NULL。
2)文件路径存储在多个数据库
这与上面的示例几乎相同,但不是链接 [Attachments] 数据库中的文件路径,而是直接在 [Invoices] 数据库中定义。像这样:
我有一个[声明]数据库
Claim (PK) --- Name --- Address
1 Joe Some Place
我有一个[发票]数据库
Invoice (PK) --- Vendor --- FilePath
100 12 path\to\invoice
还有一个[附件]数据库
UID (PK) --- Claim --- Description --- FilePath
1 1 Receipt path\to\receipt
2 1 Image path\to\image
此方法允许 [Attachments] 数据库中的 Claim 字段永远不会为 NULL,但它分隔了找到 [Attachments] FilePath 的区域。
此时我在这两种方法之间左右为难。是否有一种首选方法或最佳实践来执行此操作,或者它真的只是一个人感觉舒服的做法吗?
更新
我们必须对至少 4 个对象执行此操作。不只是两个。
非常感谢,非常感谢任何帮助,
布兰登
最佳答案
如果我遇到问题,我会为所有类似文档的实体创建一个名为 Document
的基表,它具有所有文档的共享属性。
有了这个基表,Attachment
表将与 Document
表具有一对多
关系。
其他类似文档的实体,例如 Invoice
或 Claim
将与 Document 表具有一对一
关系。
关于sql - 在数据库中存储文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062350/