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

Posted

技术标签:

【中文标题】使用两个表的主键的外键关系【英文标题】:Foreign Key relationship using Primary Key of both tables 【发布时间】:2017-07-05 11:23:08 【问题描述】:

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

以这三个基本表为例:

表“用户” 用户 ID |用户邮箱 |用户名 |用户姓氏 | ...表“员工” 用户 ID | employee_staff_number | ...表“管理员” 用户 ID |管理员权限 | ...

所有三个表都有“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】:

要检查两件事:

user(user_id) 是否声明为user 中的主键? user.user_idemployee.user_id 是否具有相同的类型?

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

【讨论】:

以上是关于使用两个表的主键的外键关系的主要内容,如果未能解决你的问题,请参考以下文章

SQL怎么在有外键的主键表中插数据

请问SQL server 中的主键和外键的作用

mysql外键

SQL中有主外键的两表到底那这是主表

谈谈mysql的主键和外键

Mysql的外键