我正在设计一个数据库结构,其中包含以下简化示例:
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)
我认识到,然而,这增加冗余一定程度,因为这信息是可以通过"涨的关系树".这是个坏主意吗?
谢谢!
这是否是一个坏主意取决于数据库的典型用例。
添加额外的外键会增加修改结构的成本(如果修改关系则插入、更新、删除)。
没有额外的外键会增加查询的成本,否则查询会受益于它们的存在。
如果项目结构变化不大,但您经常查询该结构,则额外的外键可能会产生净积极影响。如果有疑问,请使用合理的测试数据创建结构,并对您认为典型的一些查询进行基准测试。