数据库设计,包含多列参考或两列,引用类型和ID

时间:2011-10-11 20:47:36

标签: database-design

我需要一个用于存储工作项的表。工作项可以与我们数据库中的许多不同类型的现有实体之一相关联,例如Person,Company等。一种方法是将实体类型和实体id存储在两列中以供参考。这是我以前做过的事情。另一种方法是为每种类型的实体分配多个列 在第一种方法中,应用程序必须在关联中维护完整性约束。数据库专家优先考虑第二种方法,因为它可以具有FK约束,并且如果需要,还可以针对不同的实体ID使用不同的数据类型。显然,对于除一列之外的每一行,所有其他行都将为空。根据数据库专家改变表格以添加新引用不是问题,因此有许多空值。

此时我对此方法没有重大反对意见,但我还是想问一下。 我的问题是,为什么不应该使用第二种方法有什么好的理由。

1 个答案:

答案 0 :(得分:0)

如果2个值不为空怎么办?

如果零值不为空怎么办?

您需要添加业务逻辑以正确执行约束。

其他列的唯一好处是FK定义的默认数据库级别约束。 缺点与所有非规范化的缺点相同。

我将避免为新数据条件更改我的架构,使用选项一,在触发器中创建适当的业务逻辑以强制执行约束。

我的2美分

也:

考虑到某个工作项可能在某个时候希望与同一类型的其他实体(如人)相关联。

你忽略了另一个选项,即创建一个新的关联表,将work_item链接到person(或多个 - 可能是角色和状态等...),另一个是work_item to org ..等等,这样,你可以对此中间表强制执行FK约束,并为您的业务逻辑提供一个好的位置。