我正在使用以下简化示例设计数据库结构:
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
然而,我意识到,这增加了一定程度的冗余,因为通过“上升关系树”可以获得 信息。这是个坏主意吗?
谢谢!
答案 0 :(得分:2)
这是否是一个坏主意取决于数据库的典型用例。
添加额外的外键会增加修改结构的成本(如果修改关系,则为INSERT,UPDATE,DELETE)。
不拥有额外的外键会增加查询的成本,否则这些查询会从其中受益。
如果项目结构没有太大变化,但你经常查询结构,额外的外键很可能是净正值。如果有疑问,请使用合理的测试数据创建结构,并对您认为典型的一些查询进行基准测试。
答案 1 :(得分:1)
这不像你必须在这里做4个查询。您只需在单个查询中执行连接所有表的连接。这并没有增加很多复杂性,但确实增加了一些。我会选择你拥有的东西。