【问题标题】:Same Foreign key column referring to 2 separate primary key of 2 table相同的外键列引用 2 个表的 2 个单独的主键
【发布时间】:2015-09-22 01:48:24
【问题描述】:

我是数据库设计的新手。

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

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

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

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
);

现在的问题是,当用户注册为求职者时,求职者表被填充,尝试相应地更新登录表。但我在那里面临一个问题。由于外键限制,登录表尝试在雇主表中查找相同的用户名。我已经阅读了条件外键,不知道如何准确使用它,以及它的优缺点。

【问题讨论】:

  • 也许你可以从雇主和求职者表中创建一个外键到登录表,而不是相反。

标签: mysql database


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2014-12-24
    • 1970-01-01
    • 2012-03-02
    • 2013-12-26
    • 1970-01-01
    相关资源
    最近更新 更多