我现在面临着一个巨大的挑战。我正在设计一个数据库,当我有一个强实体“CLIENT”和一个弱实体“AFFILIATE”,它的主键与父主键相结合。两者之间的识别关系必须是“一对多” ”的关系,并有完全的参与。但我的问题是,在 SQL 中,由于 AFFILIATE 的主键必须由其鉴别器和父主键定义,一对多关系将效率低下,例如在 AFFILIATE 中可能有一个 id_affiliate 与许多 id_client。请帮我。
3 回答
这根本不是一个不寻常的设置,你有什么具体的理由相信它会效率低下吗?
客户端应该有一个集群主键 id_client 附属公司应该有一个集群主键 id_client + id_affiliate
两者之间的连接是一个简单的 b-tree 查找,没有额外的页面查找跃点(因为集群键),并且给定客户端的所有附属公司可能在同一个数据页面上,因此查找将非常快。
我相信你误解了弱实体关系和强实体关系的复杂性。事实上,在实践中,这个概念在设计表格时几乎没有相关性。作为规范化过程的一部分,您需要关注的是两个表之间的基石关系。
您的详细信息有点粗略,但如果您认为它效率低下,因为当您查询 AFFILIATE 以查找客户 ID 时将返回多条记录,我会不同意。
如果这种关系是强制性的,您将不会遭受任何低效率,如果这是一种可选关系,那么在关系数据库模型的上下文中,您的强实体与弱实体关系没有显着差异。
实际上,在您的问题中,您回答了自己的问题,说明:
但我的问题是,在 SQL 中,由于 AFFILIATE 的主键必须由其鉴别器和父主键定义,一对多关系将效率低下,例如在 AFFILIATE 中可能有一个 id_affiliate 与许多 id_client。
这不是问题,这就是它的工作原理。
@John Wu 和 @Hituptony,非常感谢您的帮助,我遇到的问题现在已经解决。事实上,我不太了解“弱实体集”的概念,我们可以拥有具有相同鉴别器但代表不同对象的弱实体,因为它们与不同的强实体相关。例如,我们可以有相同的affiliate_id,但代表不同客户的不同附属公司。