在数据库中使用“外键冗余”是不是很糟糕?

时间:2012-08-08 00:28:05

标签: database-design

我正在使用以下简化示例设计数据库结构:

Team has many members
Member has many clients
Client has many projects

假设我的对象具有以下参数:

Team: id, type
Member: id, team_id, name
Client: id, member_id, email
Project: id, client_id

找到项目的客户,客户的成员或成员的团队非常简单。

但是,假设我想找一个项目的团队,例如,我必须首先找到一个项目的客户,然后是客户的成员,然后是成员的团队。

我可以直接在项目中添加一个team_id,如下所示:

Project: id, client_id, team_id

然而,我意识到,这增加了一定程度的冗余,因为通过“上升关系树”可以获得 信息。这是个坏主意吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

这是否是一个坏主意取决于数据库的典型用例。

添加额外的外键会增加修改结构的成本(如果修改关系,则为INSERT,UPDATE,DELETE)。

拥有额外的外键会增加查询的成本,否则这些查询会从其中受益。

如果项目结构没有太大变化,但你经常查询结构,额外的外键很可能是净正值。如果有疑问,请使用合理的测试数据创建结构,并对您认为典型的一些查询进行基准测试。

答案 1 :(得分:1)

这不像你必须在这里做4个查询。您只需在单个查询中执行连接所有表的连接。这并没有增加很多复杂性,但确实增加了一些。我会选择你拥有的东西。