数据库表在子表和父表中都有外键的关系

时间:2014-12-31 19:49:31

标签: database-design

假设我们有两个表CUSTOMER和VEHICLE有一对多的关系。 VEHICLE有一个CUSTOMERID作为外键,使其成为子表。问题是,为什么我不能将VEHICLEID作为CUSTOMER表的外键。我知道这不是正确的方法,但我需要知道更为详细和深入的原因,为什么它不正确

3 个答案:

答案 0 :(得分:1)

你可以,这是建立一对多关系的常用方法,其中一个孩子是“特殊的”。

通过使其中一个FK为NULL,或通过将其强制执行推迟到事务结束(如果您的DBMS支持延迟约束),可以解决由此产生的周期性依赖性(以及插入新数据时的鸡与蛋问题) )。

答案 1 :(得分:0)

因为您只能为每位客户添加一辆车...就像一辆车一行一行......一排=一张桌子上的一位顾客!

你的第一个外键完成外键所做的所有工作。不需要另外的外键反转! 2交叉外键将在两个表中创建插入不可能......

答案 2 :(得分:0)

您可以,您只需了解表格之间的关系类型即可。是1-1吗? 1-多?很多很多?一个客户可以只有一辆车,或者他们可以拥有多辆车?如果一个客户可以拥有多个车辆,那么就像你描述的那样,这是一个多关系。

另一方面,如果客户表中有车辆FK,那么您说每辆车可能有多个客户,这可能与您的要求不符。

或者它可能是许多关系,其中一个客户可以拥有多个车辆,并且每个车辆可以与多个客户相关。在这种情况下,您需要一个带有一对FK的customerVehicle表(一个customerID,一个vehicleID。)


在回复您的评论时,您确实需要解释您的要求,或者您正在尝试做什么。您可以根据需要实现密钥,在部署之后,如果您没有按照自己的要求执行操作,则会失败。

一对一的关系总是可以用一张表来表示,所以如果这是您的要求,那么一个客户只能拥有一辆其他客户无法拥有的车辆,那么您根本不需要相关的车辆表。车辆表中的所有字段都可以移动到客户表中。