在MySql中为不同的用户存储相同的唯一编号

问题描述 投票:0回答:2

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

mysql sql unique-constraint
2个回答
1
投票

不,不要创建多个雇员表

您的情况在SQL世界中是非常标准的,这就是我们所谓的1对N关系(或one to many)。一个公司可以有很多员工,但是一个员工链接到一个公司。

您需要使用唯一的公司ID和公司名称创建公司表。然后,在雇员表中,将具有外键约束的新列添加到公司ID列。最后,在您的雇员表中,对夫妇(emp_no,company_id)设置唯一约束,以使唯一性约束表示您的实际约束。


0
投票

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具有单个主键列。可以将其用于其他表中的外键引用。

© www.soinside.com 2019 - 2024. All rights reserved.