【问题标题】:Store the same Unique Number for different users in MySql在 MySql 中为不同用户存储相同的唯一编号
【发布时间】:2019-11-09 06:48:31
【问题描述】:

我有一个员工表,它在 emp_no 列中存储唯一的员工编号。问题是,如果另一个用户或公司将其员工存储在同一个表中,并且有一个具有相同编号的员工,例如1001 已经被使用过,他们不能在那里存储员工。
我想知道的是我应该为每个新用户创建一个新的员工表还是有不同的解决方案?

【问题讨论】:

  • 您可以使用公司 ID 和 emp_no 使其唯一。因此,公司下的雇员 ID 只有一次。对于击球手的答案,您可以包括您的员工表屏幕排序
  • 将主键设为公司 ID 和 EmployeeID 的组合。一个键可以由一列或多列组成

标签: mysql sql unique-constraint


【解决方案1】:

不,不要创建多个员工表

您的情况在 SQL 世界中是非常标准的,这就是我们所说的 1 对 N 关系(或one to many)。一家公司可以有多名员工,但一名员工与一家公司相关联。

您需要创建一个具有唯一公司 ID 和公司名称的公司表。 然后,在您的员工表中,将具有外键约束的新列添加到公司 id 列。 最后,在您的员工表中,对这对夫妇 (emp_no, company_id) 设置唯一约束,以便唯一性约束代表您的真实世界约束。

【讨论】:

  • 感谢您的回答。只是为了澄清一下,这样我的实施就不会出错:1] Company tb with your parameters(已经有了); 2] 子雇员表emp_entity id column 上的外键约束(在级联更新中具有该约束) 3] 两列emp_numberemp_entity 上的唯一约束(尚无此约束)。因此,我表上的编辑将如下所示:ALTER TABLE `database`.`employeetable` DROP INDEX `unique_emptb_empno`, ADD UNIQUE `unique_emptb_empno` (`emp_number`, `emp_entity`) USING BTREE;
  • 我测试了你的答案,效果很好!再次感谢。
【解决方案2】:

Baxbong 的回答是正确的,但还远远不够。您应该像这样设置表格:

create table companies (
    company_id int auto_increment primary key,
    company_name varchar(255),
    . . .  -- all your other columns
);

create table employees (
    employee_id int auto_increment primary key,
    company_id int not null,
    emp_no varchar(255) not null,
    . . .  -- all your other columns
    constraint unq_employees_company_empno unique (company_id, emp_no),
    constraint fk_employees_company foreign key (company_id) references companies (company_id)
);

这里的重点是employees 有一个主键列。这可用于其他表中的外键引用。

【讨论】:

    猜你喜欢
    • 2018-02-19
    • 2015-05-31
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    相关资源
    最近更新 更多