Храните один и тот же уникальный номер для разных пользователей в MySql - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть Таблица сотрудников, в которой хранятся уникальные номера сотрудников в столбце emp_no. Дело в том, что если другой пользователь или компания хранят своих сотрудников в той же таблице и имеют сотрудника с таким же номером, например, 1001, который уже использовался, они не могут хранить там сотрудника.
ЧТО я хочу знать, это то, что я должен создатьновая таблица сотрудников для каждого нового пользователя или есть другое решение?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

Нет, не создавайте таблицу с несколькими сотрудниками

Ваш случай очень стандартен в мире SQL, это то, что мы называем отношением 1 к N (или один кмного ). В компании может быть много сотрудников, но сотрудник связан с одной компанией.

Вам необходимо создать таблицу компаний с уникальным идентификатором компании и названием компании. Затем в таблицу сотрудников добавьте новый столбец с ограничением внешнего ключа в столбец идентификатора компании. Наконец, в таблице сотрудников укажите уникальное ограничение для пары (emp_no, company_id), чтобы ограничение уникальности представляло ограничение реального мира.

1 голос
/ 09 ноября 2019

Ответ Баксбонга верен, но он недостаточно далеко зашел. Вы должны настроить таблицы следующим образом:

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 имеет один столбец первичного ключа. Это можно использовать для ссылок на внешние ключи в других таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...