sql中的一对多识别关系

时间:2013-12-05 17:23:16

标签: sql one-to-many identifying-relationship

我现在面临着一个很大的挑战。 我正在设计一个数据库,当我有一个强大的实体“CLIENT”与弱实体“AFFILIATE”时,它的主键本身与父键的主键相结合。两者之间的识别关系必须是“一对多” “关系并有全部参与。 但我的问题是在SQL中,由于AFFILIATE的主键必须由其鉴别符和父键的主键定义,因此一对多关系效率低,例如在AFFILIATE中可能有一个id_affiliate与很多id_client。请帮帮我。

3 个答案:

答案 0 :(得分:1)

这根本不是一个不寻常的设置,您是否有任何具体的理由相信它会效率低下?

客户端应具有id_client的群集主键 联属会员应具有id_client + id_affiliate

的群集主键

两者之间的连接是一个简单的b树查找,没有用于页面查找的额外跳(因为聚类键),并且给定客户端的所有附属关系可能位于同一数据页上,因此查找速度非常快。

答案 1 :(得分:0)

我相信你错了弱实体关系的复杂性。事实上,在实践中,这个概念在设计表格时几乎没有任何意义。您需要关注的是两个表之间的基石关系,作为规范化过程的一部分。

您的详细信息有点粗略,但是如果您认为它会效率低下,因为当您查询AFFILIATE查找客户端ID时会返回多条记录,我会乞求不同。

如果这种关系是强制性的,那么你就不会有任何低效率,如果这是一个可选关系,那么在关系数据库模型的上下文中,你的强弱实体关系没有显着差异。

事实上,在您的问题中,您回答了自己的问题:

  

但我的问题是,在SQL中,由于AFFILIATE的主键必须由其鉴别符和父键的主键定义,因此一对多关系效率低,例如在AFFILIATE中可能有一个id_affiliate与许多id_client相关。

这不是问题,这是它的工作原理。

答案 2 :(得分:0)

@John Wu和@Hituptony,非常感谢你们的帮助,我现在解决了这个问题。事实上,我不太了解“弱实体集”的概念,其中我们可以使用具有相同鉴别器的弱实体但代表不同的对象,因为它们与不同的强实体有关。例如,我们可以拥有相同的affiliate_id,但代表不同客户的不同分支机构。

相关问题