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

时间:2017-07-05 11:23:09

标签: mysql sql foreign-keys

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

以这三个基本表为例:

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

表“员工”
user_id | employee_staff_number | ...

表“admin”
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 个答案:

答案 0 :(得分:2)

要检查两件事:

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

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