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

Yuv*_*rmi 10 database-design

我正在设计一个数据库结构,其中包含以下简化示例:

Team has many members
Member has many clients
Client has many projects
Run Code Online (Sandbox Code Playgroud)

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

Team: id, type
Member: id, team_id, name
Client: id, member_id, email
Project: id, client_id
Run Code Online (Sandbox Code Playgroud)

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

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

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

Project: id, client_id, team_id
Run Code Online (Sandbox Code Playgroud)

我认识到,然而,这增加冗余一定程度,因为这信息可以通过"涨的关系树".这是个坏主意吗?

谢谢!

Eri*_* J. 2

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

添加额外的外键会增加修改结构的成本(如果修改关系则插入、更新、删除)。

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

如果项目结构变化不大,但您经常查询该结构,则额外的外键可能会产生净积极影响。如果有疑问,请使用合理的测试数据创建结构,并对您认为典型的一些查询进行基准测试。