sql - 在数据库中存储文件路径

标签 sql database database-design

背景资料

我正在处理一个项目,该项目的文件路径字段是“一对一”关系(发票对象只允许一个文件)或“一对多”关系( 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 表具有一对多关系。
其他类似文档的实体,例如 InvoiceClaim 将与 Document 表具有一对一关系。

draft model

关于sql - 在数据库中存储文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062350/

相关文章:

mysql - SQL将列添加到结果中,其中包含匹配查询的其他表中的行总和

PHP 图像未在数据库中更新

mysql - 数据库设计价格每天都在变化

php - 使唯一键与 NULL 值一起使用?

sql - PostgreSQL:子选择内部插入

php - 从两个表中选择并按时间戳排序

sql - 停止 "Closing JPA EntityManagerFactory shutdown"

database - 数据库可以在不属于 1NF 的情况下属于 2NF 吗?

mysql - 如何根据前一行更新 MySQL 行?

database-design - 非主键属性是否应该成为 DynamoDB 表定义的一部分?