【问题标题】:Design generic attachments SQL Table/Entity in EF Code-First在 EF Code-First 中设计通用附件 SQL 表/实体
【发布时间】:2011-12-01 14:05:32
【问题描述】:

在我的系统中,很多实体都需要有附件。

例如,Mission 实体需要自己的附件,还有 Activity、Projects 等。

问题是如何设计Attachments表?

  1. 每个实体的附件表,例如 MissionsAttachments、ActivityAttachments 等?
  2. 一个表用于系统中的所有附件?如果是这样,每个附件的标识符是什么?

知道如何创建一个为整个系统服务的通用附件表吗?

【问题讨论】:

  • 问题是不是所有的回答都是答案。
  • Marc,我刚刚查看了我的问题的答案并标记为已回答少数回复。
  • 无论哪种方式,您似乎都倾向于使用单个附件表。那你为什么还要为不同的实体考虑单独的表呢?那是因为不同的实体期望他们的附件有不同的属性集吗?
  • 嗨,Andriy,不。我确实需要一个通用表,这只是我需要的一个示例。您对通用表有什么想法吗?

标签: sql database-design ef-code-first


【解决方案1】:

我只需要一张用于附件的表格和一张用于说明实体的表格。例如:

Entities Table:
==============
EntityId
EntityName

Attachments Table:
=================
AttachmentId
EntityId
Attachment

【讨论】:

    【解决方案2】:

    如果您想要一个通用的附件表,您可以执行以下操作:

    create table attachments 
    (attachment_id int not null, 
     parent_id int not null, 
     parent_type varchar(32) not null, 
      other_cols_here, 
     primary key(attachment_id))
    

    这将允许您拥有独立的实体表(因此您不必总是在某个通用表中为任务、活动等设置一行)。要查找任务的附件,您必须执行以下操作:select * from attachments where parent_id = MISSION_ID and parent_type = 'mission'

    当然,这样做的缺点是您放弃了对 parent_id 的任务表进行外键约束的能力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 2017-07-02
      • 2015-09-02
      相关资源
      最近更新 更多