在EF Code-First中设计通用附件SQL表/实体

时间:2011-12-01 14:05:32

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

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

例如,Mission实体需要自己的附件,还有活动,项目等。

问题是如何设计附件表?

  1. 每个实体的附件表,如MissionsAttachments,ActivitiesAttachments等。
  2. 系统中所有附件的一个表格?如果是这样,每个附件的标识符是什么?
  3. 我是否知道如何创建一个服务于整个系统的通用附件表?

2 个答案:

答案 0 :(得分:0)

我只有一个附件表和一个表来说明实体。例如:

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

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

答案 1 :(得分:0)

如果您需要通用附件表,则可以执行以下操作:

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的任务表具有外键约束的能力。