使用两个表的主键的外键关系
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_id
和 employee.user_id
是否具有相同的类型?
您需要user(user_id)
上的索引才能将其用作外键引用。创建此类索引的最佳方法是将其声明为主键。
【讨论】:
以上是关于使用两个表的主键的外键关系的主要内容,如果未能解决你的问题,请参考以下文章