11

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

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

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

谢谢!

4

2 回答 2

2

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

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

没有额外的外键会增加查询的成本,否则它们会从它们的存在中受益。

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

于 2012-08-08T00:34:53.763 回答
1

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

于 2012-08-08T00:39:04.180 回答