当前位置: 首页 > 知识库问答 >
问题:

使用两个表的主键的外键关系

燕建中
2023-03-14

我们系统的所有用户都来自一个主“用户”类。同样,我们希望以相同的方式构造数据库,拥有一个主“用户”表,该表与特定用户类型的必要表连接,以提供额外的用户信息。

以这三个基本表格为例:

表用户
user_id|user_email|user_firstname|user_lastname|...

表雇员
user_id|employee_staff_number|...

表管理
user_id|admin_permissions|...

这三个表的主键都是“user_id”列,显然,对于相同的用户,主键总是具有相同的值。

但是,我只是尝试实现外键,因此如果主用户表中没有相应的条目,派生表中就不能存在用户行。正在尝试运行以下SQL

ALTER TABLE `employee` ADD CONSTRAINT `fk_employee` FOREIGN KEY (`user_id`) REFERENCES `database_name`.`user`(`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

导致错误

#1215 - Cannot add foreign key constraint 

是否有一种方法可以实现这一点,而不在派生表中引入新的主键,从而使“user_id”成为这些表中的常规索引?

共有1个答案

逄嘉木
2023-03-14

要检查两件事:

  • user(user\u id)是否声明user中的主键?
  • user.user\u idemployee.user\u id是否具有相同的类型

您需要user(user\u id)上的索引才能将其用作外键引用。创建此类索引的最佳方法是将其声明为主键。

 类似资料:
  • 如何使用hibernate注释实现下表? 当前代码为:(为简洁起见,已删除) 使用者 社交网络 SocialProfile公司 显然我的代码现在不能正常工作。有人能解释一下吗?

  • 问题内容: 我正在开发一个将用作其他应用程序的可扩展框架的应用程序。 基本类之一称为节点,节点具有内容。SQL表如下所示: TABLE节点(NodeId int,....等) 表格NodeContentRelationship(NodeId int,ContentType字符串,ContentId int) 开发人员可以扩展应用程序以创建自己的内容类型。 显然,从关系数据库的角度来看,这很不好,因

  • 问题内容: 为简化起见,我有两个使用外键一对一关联的表,例如: 一个用户可能有很多动作,也可能没有。我需要一个sql select来返回在actions表中没有user_id值的用户id。 所以我需要一个返回用户ID 2(Smith)的SQL查询,因为外键值不包含ID 2 我尝试了以下SQL,但它返回了所有用户ID: 问题答案:

  • 我有两个表,在我的Spring代码中是学生和课程。我想创建一个关系表,“获取课程”。我只有学生ID和课程ID。我可以在我的java代码中创建一个具有两个主键的表,但我不能将它们声明为外键。 我尝试了这个解决方案,将两个外键作为主键,但没有成功,我认为其中缺少了一些部分。因此,我尝试了基于此解决方案的方法: (学生实体有id, name, surname)(课程实体有id, Coursename)

  • 问题内容: 假设我有下表: 我可以使用以下JSON结构在ElasticSearch中轻松映射它: 如果然后有第二个表称为该表在外键中引用,例如: 然后,我将如何在Elasticsearch中映射该关系?是否有一种通用方法可以在Elasticsearch中映射具有一个或多个外键关系的两个表?例如,通过执行特定的join语句? 问题答案: 在SQL世界中,一切都与保持表之间的关系有关,以使数据永远不会

  • 我有两个我想使用“主键”链接的工作表。目前,我已经使用函数从Sheet1导入了一些列到Sheet2(例如第一个单元格)。我的目的是完成与Sheet2中每个导入行相关的数据。但是,Sheet1与其他人共享,因此他们可以修改行的内容,而无需删除或修改我在Sheet2中添加的数据(而这在Sheet1中不存在)。 考虑到我的表中有一列“id”可以被视为主键,我如何在sheet2中添加新数据,只要它与“id