【发布时间】:2011-03-25 09:22:38
【问题描述】:
要求存储不同实体类型的附件。
假设我们有 3 个实体类型 Company 、 Department 和 Employee。每个可以有多个附件(文档)。
处理这个问题的最佳方法是什么?
解决方案 1:
公司表
- 公司编号
部门表
- 部门编号
员工表
- 员工编号
附件类型表
- 类型标识
- 类型(公司、部门、员工)
附件表
- 附件 ID
- TypeId(映射到附件类型)
- entityId(映射到 CompanyId / DeptId / EmployeeId)
优点:我以后可以轻松添加新的实体类型
缺点:在这种情况下,我无法在实体和附件之间维护外键关系。
解决方案 2:
公司表
- 公司编号
部门表
- 部门编号
员工表
- 员工编号
公司附件表
- 附件 ID
- 公司 ID (FK)
部门附件表
- 附件 ID
- 部门 ID (FK)
EmployeeAttachments 表
- 附件 ID
- EmployeeId (FK)
优点:外键完整性
缺点:为了添加新实体,我需要单独拥有新的附件表。
那么假设我将来可能需要添加新实体,那么最好的方法是什么?
编辑 1:
谢谢你们的回复。
如果我想使用解决方案 2,我发现在附件表中创建新列比为每个实体创建新附件表来映射它们更容易? 比如,
公司表
- 公司编号
部门表
- 部门编号
员工表
- 员工编号
附件
- 附件 ID
- 公司 ID (FK)
- EmployeeId (FK)
- 部门 ID (FK)
我错过了什么吗?
【问题讨论】:
-
您看过基于文档的 NoSQL(即 CouchDB)数据库吗?
标签: sql-server database-design