小编Jas*_*son的帖子

一个通用映射表 VS 许多特定映射表

我正在尝试设计数据库表来跟踪最终用户上传的文件。
文件可以在不同的上下文中上传。
每个上下文都是一个不同的表。

举个例子:

  • 员工可以针对“每周费用”条目上传多个“收据”文件。
  • 员工可以针对“宠物”条目上传多个“照片”文件。

这个(人为的)场景中的实体/表是:

  • Employees (Id, Name)
  • Expenses (Id, Date, RequestedRefund, RequestedByEmployeeId)
  • Pets (Id, Name, Type, BelongsToEmployeeId)

我已经有一个名为的表Files,用于跟踪有关文件本身的信息:
Files (Id, Name, Size, Extension, Folder)

我的问题是关于如何根据文件记录映射费用收据上传和宠物照片上传。我知道我可以通过两种方式做到这一点:

第一个选项:

有一个通用映射表:GenericFileMap (FileId, ContextId, Type)
where

  • FileId 是文件记录的id
  • ContextId 是我试图检索的上下文记录的 ID
  • Type 是描述上下文本身的字段

在这种情况下,我会像这样获取员工的所有费用收据:

SELECT *
FROM Employee e
INNER JOIN Expenses ex ON e.Id = ex.RequestedByEmployeeId
INNER JOIN GenericFileMap g ON g.ContextId = ex.Id AND g.Type = 'expense'
INNER JOIN Files f ON g.FileId = f.Id
Run Code Online (Sandbox Code Playgroud)

第二个选项:

每个实体/上下文表都有单独的映射表: …

database-design sql-server table

5
推荐指数
1
解决办法
2309
查看次数

标签 统计

database-design ×1

sql-server ×1

table ×1