【问题标题】:Link table with 3 tables - Schema design链接表与 3 个表 - 架构设计
【发布时间】:2013-01-05 02:15:15
【问题描述】:

我正在寻找一种向系统实施“上传附件”功能的方法。这些附件可以应用于 2 个领域,即调查答案和员工行动。我想要一个链接表,因为我想要一种实现附件存储库的方法,这样它们就可以应用于答案和操作,而不必再次上传相同的文档。我可以简单地创建一个链接表,例如:

INT - 附件 ID

INT - ApplysTo -> 系统中的枚举(1 表示答案,2 表示操作)

INT-AppliesToId -> 操作或答案的 ID

这是一个糟糕的设计吗?我感觉我做错了。

这是我的第一篇文章,如果它没有达到标准,敬请原谅!

非常感谢,

克里斯

【问题讨论】:

    标签: c# sql schema


    【解决方案1】:

    从设计的角度来看,这并不是不合适的,但由于 GUID 被用作您的主键,您可能可以删除 ApplyTo 字段,因为 GUID 保证是唯一的。

    以下是查找指定调查答案的所有附件的示例:

    SELECT
        AttachmentId
    FROM
        Attachments
    WHERE
        AppliesToId = @SurveyAnswerId
    

    【讨论】:

    • 糟糕,我知道我会犯错误,我实际上是在使用整数作为我的 ID。我已经更新了问题,对此表示歉意。
    • 您可能需要考虑切换到此应用程序的 GUID,因为您可以从唯一性中获得一些好处。请参阅codinghorror.com/blog/2007/03/… 了解更多信息。
    【解决方案2】:

    这不是一个糟糕的设计,但您可能会发现这种设计更有用:

    Attachment
    AttachmentId (pkey)
    
    Answer
    AnswerId (pkey)
    AttachmentId (fkey)
    
    Action
    ActionId (pkey)
    AttachmentId (fkey)
    

    这允许您拥有没有任何操作的附件,无需将数据值设置为 NULL,并且 siple 连接显示同一附件的所有操作和答案,而不是条件连接

    (伪代码)

    select * from Attachment
    outer join Answer on Answer.AttachmentId = Attachment.AttachmentId
    outer join Action on Action.AttachmentId = Attachment.AttachmentId
    

    如果操作/答案可以有多个关联的附件,那么您可以修改它以包含交叉连接:

    Attachment
    AttachmentId (pkey)
    
    Answer
    AnswerId (pkey)
    
    Action
    ActionId (pkey)
    
    AttachmentAnswer
    AttachmentAnswerId (pkey)
    AttachmentId (fkey)
    AnswerId (fkey)
    
    AttachmentAction
    AttachmentActionId (pkey)
    AttachmentId (fkey)
    ActionId (fkey)
    

    【讨论】:

    • 感谢回复,但我不明白需要底层解决方案。 AnserId 和 AttachmentId 是否足以允许多个附件?
    • 仅当您需要与 Actions 和 Answers 保持多对多关系时,才需要 AttachmentAction 交叉表。你可能不会...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2021-12-09
    • 2021-02-19
    相关资源
    最近更新 更多