在数据库中存储文件路径

Bra*_*vis 5 sql database database-design

背景资料

我正在开发一个项目,其文件路径字段是"一对一"关系(Invoice对象只允许一个文件)或"一对多"关系(一个Claim对象有很多可以添加的文件它).

我到底有什么

我目前有两个想法.

1)所有文件的一个数据库

我有一个[索赔]数据库

Claim (PK) --- Name --- Address
1              Joe      Some Place
Run Code Online (Sandbox Code Playgroud)

我有[发票]数据库

Invoice (PK) --- Vendor --- FilePathID
100              12         1
Run Code Online (Sandbox Code Playgroud)

还有一个[附件]数据库

UID (PK) --- Claim --- Description --- FilePath
1            NULL      Invoice         path\to\invoice
2            1         Receipt         path\to\receipt
3            1         Image           path\to\image
Run Code Online (Sandbox Code Playgroud)

这可以通过以下方式工作:

[Invoice]文件将在[Invoice]对象中明确定义(在本例中为[Attachment] ID 1).然后,文件将通过"附件"数据库中的链接号(上面的情况中的权利要求1)附加到[Claim]对象.这样我们就可以查询列出[Claim] one的所有附件,但同时将[Invoice]文件保存在由文件的UID编号链接的相同[Attachments]数据库中.这允许将所有上载映射到单个数据库中.

我对此方法的唯一关注是,在为[Invoice]上传的文件中,Claim字段保留为NULL.

2)文件路径存储在多个数据库中

这几乎与上面的示例相同,但不是在[Attachments]数据库中链接FilePath,而是直接在[Invoices]数据库中定义.像这样:

我有一个[索赔]数据库

Claim (PK) --- Name --- Address
1              Joe      Some Place
Run Code Online (Sandbox Code Playgroud)

我有[发票]数据库

Invoice (PK) --- Vendor --- FilePath
100              12         path\to\invoice
Run Code Online (Sandbox Code Playgroud)

还有一个[附件]数据库

UID (PK) --- Claim --- Description --- FilePath
1            1         Receipt         path\to\receipt
2            1         Image           path\to\image
Run Code Online (Sandbox Code Playgroud)

此方法允许[Attachments]数据库中的Claim字段永远不为NULL,但它会分隔找到[Attachments] FilePath的区域.

此时我对这两种方法非常不满.有没有一种首选的方法或最佳做法来做到这一点,还是真的只是一个人觉得舒服的事情?

更新

我们必须为至少4个对象执行此操作.不只是两个.


非常感谢提前,非常感谢任何帮助,

布兰登

Dar*_*tis 2

不确定这是否是“最佳实践”,但这里有一个选项 3:

【索赔】表:

ClaimID (PK) --- Name --- Address
1                Joe      Some Place
Run Code Online (Sandbox Code Playgroud)

【发票】表:

InvoiceID (PK) --- Vendor
100                12     
Run Code Online (Sandbox Code Playgroud)

【附】表:

AttachmentID (PK) --- Description --- FilePath
1                     Invoice         path\to\invoice
2                     Receipt         path\to\receipt
3                     Image           path\to\image
Run Code Online (Sandbox Code Playgroud)

【索赔附件】表:

ClaimID (FK) --- AttachmentID (FK)
1                2
1                3
Run Code Online (Sandbox Code Playgroud)

[发票附件]表:

InvoiceID (FK) --- AttachmentID (FK)
100                1
Run Code Online (Sandbox Code Playgroud)

如果您需要数据库强制一张发票只能有一个附件,请在 InvoiceAttachment 表中的 Invoice 列上设置唯一约束。

或者,如果您只想有一个表来处理附件关系,您可以执行以下操作:

[附件Rlshp]表:

AttachmentID (FK) --- EntityID --- EntityType
1                     100          Invoice
2                     1            Claim
3                     1            Claim
Run Code Online (Sandbox Code Playgroud)