弱实体能否通过同一关联关联多个强实体及ER图相关疑问
关于ER图弱实体关联与参与约束的疑问
背景与设想来源
- 学习Silverschatz所著《Database System Concepts》的6.1题时,看到参考方案将
payments设为policy的弱实体,二者通过payment关联形成双向完全参与的一对多关系。 - 我在查找匹配自身设想的弱实体与强实体关联案例时遇到困难,因此对该设想的正确性存疑。
核心疑问:弱实体能否关联多个强实体并生成复合主键?
我设想给payment关联添加来自car或customer的分支并设置完全参与,使针对某保单承保车辆的支付记录主键变为(customer_id, policy_id, payment_no)或(car_id, policy_id, payment_no),以此明确支付对应的车辆。
举个实际场景例子:
- 5位客户各有1辆车,均投保公司的2种保单,每月支付保费。
- 现有方案中支付记录的主键为
(policy_id, payment_no),仅能看到各保单对应的支付记录,无法知晓该支付对应哪辆车。 - 若添加
car端的完全参与,就能得到包含车辆信息的复合主键,更贴合现实需求——毕竟payment_no对应的支付客户可能为多辆车付费,将客户/车辆信息与支付记录关联会更实用,且仍能保持弱实体的一对多关系。
注:如果policy_id是车辆的唯一标识,此设想不成立;但如果policy_id仅指公司提供的保单类型,该逻辑会更合理。
我曾看到过类似的问题讨论,希望通过这个实例确认两点:
- 这种给弱实体关联多个强实体的设计是否合理?
- 上述提及的复合主键设计是否正确?
额外疑问:participated关联的完全参与约束设置
在participated关联中,完全参与是否应设置在accident端而非car端,且单向箭头指向car?
理由:并非所有车辆都出过事故,但每起事故必然涉及至少一辆车。
内容的提问来源于stack exchange,提问作者Tita
相关产品推荐
相关产品推荐

