5

背景资料

我正在开发一个项目,该项目的文件路径字段要么是“一对一”关系(发票对象只允许一个文件),要么是“一对多”关系(Claim 对象有许多可以添加的文件给它)。

到目前为止我所拥有的

我目前有两个想法。

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

我有一个 [Claim] 数据库

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)。然后文件将通过“附件”数据库中的链接号(在上述情况下为声明 1)附加到 [Claim] 对象。这样,我们可以进行查询以列出 [Claim] 的所有附件,但同时将 [Invoice] 文件保存在由文件的 UID 号链接的同一 [Attachments] 数据库中。这允许将所有上载映射到单个数据库中。

我对这种方法的唯一担心是,在为 [Invoice] 上传的文件中,Claim 字段保留为 NULL。

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

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

我有一个 [Claim] 数据库

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 个对象执行此操作。不只是两个。


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

布兰登

4

2 回答 2

4

如果我遇到问题,我将有一个基表调用Document所有类似文档的实体,具有所有文档的共享属性。
有了这个基表,Attachment表将与表有one-to-many关系Document
其他类似文档的实体,例如Invoice或将与 Document 表Claim有关系。one-to-one

模型草稿

于 2013-09-28T12:42:14.233 回答
2

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

【理赔】表:

ClaimID (PK) --- Name --- Address
1                Joe      Some Place

【发票】表:

InvoiceID (PK) --- Vendor
100                12     

【附件】表格:

AttachmentID (PK) --- Description --- FilePath
1                     Invoice         path\to\invoice
2                     Receipt         path\to\receipt
3                     Image           path\to\image

【索赔附件】表:

ClaimID (FK) --- AttachmentID (FK)
1                2
1                3

[InvoiceAttachment] 表:

InvoiceID (FK) --- AttachmentID (FK)
100                1

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

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

【附件Rlshp】表:

AttachmentID (FK) --- EntityID --- EntityType
1                     100          Invoice
2                     1            Claim
3                     1            Claim
于 2013-09-28T02:16:57.623 回答