当前位置: 首页 > 面试题库 >

SQL表外键,它是组合主键的一部分

蔚学真
2023-03-14
问题内容

一个表的外键是否可以成为另一个表的组合主键的一部分?例如,如果我有两个表,一个包含有关不同用户的所有活动项目的信息,另一个包含有关项目正在使用哪种设备的信息:

项目表:

Composite Primary Keys: UserId, ProjectId (两者都不是唯一的)

设备表:

Composite Primary Keys: UserId, ProjectId, EquipmentId (两者都不是唯一的)

现在可以将设备表中的ProjectId设置为项目表中的外键吗?尝试时,我收到一条错误消息,指出“项目表”中的列与现有的主键或唯一约束不匹配?


问题答案:

不。

创建外键时,在另一个表中“指向”的键必须是UNIQUE或PRIMARY
KEY约束。您不能建立指向允许重复值的列的外键。很难想象如果更新另一个表中的重复值之一(例如),数据将如何“起作用”。

若要执行您想要的操作,您必须建立一个Projects表,其中ProjectID为UNIQUE或PRIMARY KEY,然后将其他 两个
表中的外键指向该表。

附带说明,您使用术语“主键”来描述组成主键的每个表中的列。实际上,每个表可以只有一个主键。该键可以由一列或多列组成,但是该键本身仍以单数形式引用。使用主键优化搜索时,这是一个重要的区别。



 类似资料:
  • 问题内容: 我必须与Hibernate合作,但我不确定如何解决此问题,我有2个具有1..n关系的表,如下所示: 如何使用Hibernate进行管理? 我不知道如何声明将包含主键一部分的外键。 我的数据库架构是从Hibernate模型生成的。 问题答案: 我找到了解决此问题的两种方法。 第一个是一种解决方法,没有第二个那么整洁。 将实体的主键定义为包含,和的复合键,首先将假定为主键的内容定义为唯一约

  • 问题内容: 我试图弄清楚如何构建JPA实体bean,以使数据适用于我的设备。该数据库是旧的,一成不变的,所以我不能更改架构。设备模型具有复合主键,其中的一列是设备类型的FK。 我尝试了几种不同的方法。首先是设备具有DeviceModel和DeviceType,但是这给了我一个错误,那就是太多的东西在引用dev_type。因此,然后我尝试让DeviceModel引用DeviceType,但遇到了相同

  • 它应该允许独立地更新表,并在父行被删除时删除子行。

  • 我有一个表,有一个复合PK:Customer;我有一个视图,没有PK:Purchase 为了绑定我的实体,Hibernate强制我声明一个PK。所以我为购买创建了一个复合PK。 普切斯: 普查塞普克:

  • 问题内容: 我必须使用hibernate模式,并且不太确定如何解决此问题,我有2个具有1..n关系的表,如下所示: 我该如何使用Hibernate进行管理??? 我不知道如何管理第二张表的主键… 问题答案: 在Hibernate参考文档中有一个与您的案例完全相似的示例。在此示例之前,您将找到解释。这是与您的问题匹配的示例(用户是表A,客户是表B): 注意:如果您拥有这两个表的代理标识符,则要简单得

  • 我有两个表表 A 和表 B,其中表 A 具有列 col1、col2、col3、col4、col5 和 col1、col2 和 col3 组合以形成其主键。表 A 和表 B 在同一列(col1、col2 和 col3)上具有一对多关系作为其外键约束。现在,如何在 SQL 和Hibernate中仅更新表 A 和表 B 中的 col2 值?