我很难找到与我的想法类似的示例,这就是为什么我怀疑 ER 图以及弱实体与其强实体之间的关系是否正确。
这个想法是在研究 Silverschatz 的《数据库系统概念》中的问题 6.1 时产生的,其解决方案在 here 中提供。在这里,他们使“支付”成为“政策”的弱实体,“支付”关系是一对多,双方都完全参与。 我想知道我们是否可以在“汽车”或“客户”到“付款”关系上添加另一个完全参与的分支,以便每当根据涵盖该汽车的特定政策为汽车付款时,就可以使用该密钥付款是(customer_id、policy_id、 payment_no)或(car_id、policy_id、 payment_no)。
按照我的理解,这可以让我们看到付款是针对哪辆车的。为了进一步证明我的想法和理解,假设我们为五分之一的客户每人拥有 5 辆汽车,这些客户由公司提供的 2 种不同保单承保,并每月为他们投保支付保费。然后,通过链接中的解决方案提供的当前数据库,我知道我们只会看到为两种不同保单中的每一种支付的不同付款,但不知道它们专门用于哪辆车以及它们的主键“付款”为(policy_id, payment_no)。然而,如果我们将汽车部分的“支付”关系的总参与添加进来,参与关系将为支付带来我上面提到的主键。
考虑到在现实生活中, payment_no 对应于为一辆或多辆汽车付款的特定客户,将该信息与客户/汽车连接到他们所进行的实际付款不是更有用吗?这也维持了弱实体的一对多关系。
如果每个policy_id对于每辆车来说都是唯一的,那么我可以看到这个思维过程是如何失败的,但如果每个policy_id只是指所提供的汽车可以投保的保单,我认为这更有意义......
我的问题与
这个问题类似我相信,我只是想通过一个例子来确保我理解这一点,并且他们所指的唯一键的总和与我上面提供的相同。 图上的额外问题:在“参与”关系中,总参与不是应该在“事故”一方而不是“汽车”,并且单线箭头指向“汽车”吗?既然不一定所有的车都发生过事故,但每次事故应该只包括一辆车?
实际上我不同意将付款与汽车或客户挂钩。一份保单可以承保多于一辆汽车,客户通常按单笔交易而不是每辆车支付保费。客户不能支付一半保费,必须支付全额保费才能使保单生效。如果存在任何政策层面的额外费用或折扣,那么在投保车辆之间分摊付款也将很困难。如果将唯一收据编号添加到模型中,还要考虑您建议的更改。
汽车可以由多个车主拥有,付款可以由任一车主支付,甚至可以通过联名账户或与汽车无关的人支付。再说一次,我看不出其中的意义。
关于参与关系,您链接的文件说“请注意,参与关系中的事故参与并不完全,因为可能存在参与车辆未知的事故报告。”