相同的外键列引用2表的2个单独的主键

时间:2015-09-21 16:51:13

标签: mysql database

我是数据库设计的新手。

我有3张桌子。求职者,雇主和登录。

我想为这两种类型的用户(求职者和雇主)提供相同的登录页面。在登录时,我想首先验证登录表中的凭据,并确定该角色。根据角色,我可以去求职者表或雇主表,以获取有关用户的更多详细信息。

在SignUp / Registration上我想首先填写求职者/雇主,然后更新登录表。 在用户登录时,我想首先参考登录表然后转到jobseeker /雇主表。

CREATE TABLE `jobseeker` (
  `jobseeker_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `jobseeker_username` varchar(45) NOT NULL,
  PRIMARY KEY (`jobseeker_id`,`jobseeker_username`),
);

CREATE TABLE `employer` (
  `employer_id` bigint(20) NOT NULL,
  `employer_username` varchar(45) NOT NULL,
  PRIMARY KEY (`employer_id`,`employer_username`),
  UNIQUE KEY `employer_username_UNIQUE` (`employer_username`),
);

CREATE TABLE `login` (
  `login_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `login_username` varchar(45) NOT NULL,
  `login_password` varchar(45) NOT NULL,
  `login_role` enum('J','E') NOT NULL,
  PRIMARY KEY (`login_id`),
  UNIQUE KEY `login_username_UNIQUE` (`login_username`),
  CONSTRAINT `login_username_fk` FOREIGN KEY (`login_username`) REFERENCES `jobseeker` (`jobseeker_username`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `login_username_fk1` FOREIGN KEY (`login_username`) REFERENCES `employer` (`employer_username`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

现在的问题是,当用户注册为jobseeker时,将填充jobseeker表,并尝试相应地更新登录表。但我在那里遇到了一个问题。由于外键限制,登录表尝试在雇主表中查找相同的用户名。我读过有条件外键,不确定如何正确使用它,以及它的优点和缺点。

1 个答案:

答案 0 :(得分:0)

此处有两个 1-0..1 关系,其中login为1方(必填方),employerjobseeker为1..0侧(可选侧)。这些关系通过在引用强制侧的主键的可选侧上放置或使用外键来建模,并且另外对其施加唯一约束。所以你的外键是错误的。您还可以在登录时添加某种鉴别字段以确定这是哪种登录类型,但这不是必需的。您只需要注意创建一个子条目。