将文档映射到不同的实体

时间:2013-04-25 13:59:19

标签: sql database database-design

我在设计数据库时遇到问题。

我有一个表格,其中包含具有以下表格结构的文档:

[Documents]
Id [int] 
FileName [varchar]
FileFormat [varchar]
FileContent [image]

在我的程序中:每个文档可以是独立的(与实体没有任何关系),也可以是与Customer或Employee类型的对象的关系(可能很快就会出现)

每个实体在数据库中都有一个Id。例如,Employee-Table看起来像:

[Employee]
Id [int]
Fk_NameId [int]
Fk_AddressId [int]
Fk_ContactId [int]

我的想法是为实体和文档的连接创建一个表。我想到了类似的东西:

[DocumentConnection]
DocumentId [int]
EntityId [int]
Entity [varchar]

DocumentConnection-Table中的entity-column包含关系的表名。

在Employee类型的实体示例中,此列将包含“Employee”。 在我的应用程序中,然后通过从数据库中读取实体字符串来为文档构建select语句。

我不确定这是否是一种很好的方法。

1 个答案:

答案 0 :(得分:2)

我认为拥有一个EmployeeDocument表,CustomerDocument表等是一个更好的设计。

这将允许您使用外键到实体表,这在您提出的设计中是不可能的。在您的设计中,您可以在entity和entityId列中放置任何内容,并且它不能通过外键关系强制执行,它实际上与现有实体相关。

我可以看到使用DocumentConnection表的唯一原因是您的应用程序需要动态创建新类型的关系。我认为情况并非如此,因为你说每种类型的实体都有自己的表。