我正在一个项目中具有文件路径字段,该文件路径字段是“一对一”关系(允许发票对象只有一个文件)或“一对多”关系(索赔对象具有可以添加的许多文件)对此)。
我目前有两个想法。
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)。然后,文件将通过“附件”数据库中的链接号(在上述情况下为声明1)附加到[Claim]对象。这样,我们可以进行查询以列出[Claim]的所有附件,但同时将[Invoice]文件保留在由该文件的UID编号链接的同一[Attachments]数据库中。这样就可以将所有上载映射到单个数据库中。
我唯一关心的是在为[发票]上传的文件上,Claim字段保留为NULL。
2)文件路径存储在多个数据库中
这几乎与上面的示例相同,但是它不是在[附件]数据库中链接FilePath,而是直接在[发票]数据库中定义。像这样:
我有一个[声明]数据库
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个对象执行此操作。不只是两个。
非常感谢,非常感谢您的帮助,
布兰登
不确定这是否是“最佳做法”,但这是一种选择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列上放置一个唯一约束。
另外,如果您只希望有一个表来处理附件关系,则可以执行以下操作:
[AttachmentRlshp]表:
AttachmentID (FK) --- EntityID --- EntityType
1 100 Invoice
2 1 Claim
3 1 Claim
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句