我们系统的所有用户都来自主“用户”类。同样,我们希望以相同的方式构建我们的数据库,具有一个主“用户”表,该表与特定用户类型的必要表连接,以提供其他用户信息。
以这三个基本表为例:
表“用户”
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”成为那些中的常规索引?
答案 0 :(得分:2)
要检查两件事:
user(user_id)
user
被声明为主键吗?
user.user_id
和employee.user_id
具有相同的类型吗?您需要user(user_id)
上的索引才能将其用作外键引用。创建此类索引的最佳方法是将其声明为主键。