2016-03-05 3 views
-3

Я хочу создать уникальный идентификационный номер для моего проекта. У меня есть две таблицы:Создание уникальной идентификации путем объединения двух чисел

  1. Департамент
  2. employee_details_table

Я определил первичный ключ "отдела", как:

department_id tinyint(2) zerofill not null auto_increment, 

Для "employee_details_table", первичный ключ назван как «employee_id». Я хочу сгенерировать идентификатор сотрудника для этого столбца в виде пятизначного числа (или строки), где первые две цифры - это идентификатор department_id, назначенный сотруднику, а последние 3 цифры должны быть похожими на auto_increment.

Пример:

  • 01020: Он должен быть назначен сотрудник, принадлежащий отделу 01 и он является двадцатым сотрудником в этом отдела.

  • 03040: Он должен быть назначен сотруднику, принадлежащему отделу 03, и он является 40-м сотрудником в этом отделе.

P.S .: Я опубликовал этот вопрос после интенсивных исследований и попробовал свою руку при кодировании материала.

+2

Я не уверен, что ваша точка зрения на решение этой проблемы является лучшей практикой. – Xvolks

+0

у каждого департамента будет только 999 emp? – vins

+0

@Vinoth да .... –

ответ

1

Помните, что сотрудник может менять отделы в компании. Таким образом, первичный ключ не должен отражать отдел, поскольку работник, переходящий из «Информационных технологий» в «Информацию по управлению», заставит их ПК изменять каждый раз, где он хранится в базе данных (возможно его реализовать таким образом, но считается плохой практикой).

Вместо этого вы должны использовать обычный автоинкремент PK в таблице employee, чтобы ваши соединения были надежными, а затем решили добавить новый столбец, содержащий номер, который они находятся в отделе.

Таким образом, вы будете также нуждаться в этом в employee таблице:

department_nth tinyint(2) not null, 

Это не является уникальным, так что будет один 1 для каждого отдела, один 2 для каждого отдела, не и т.д., пока все отделы имеют последовательность 1..N для их сотрудников.

Ваши номера сотрудника поэтому косметического устройства: 01020 это только department.department_id сцепляется с employee.department_nth - вам не нужно явно хранить его в любом месте. Когда вы ссылаетесь на сотрудника в базе данных (то есть на внешний ключ), просто используйте employee_id, так как он не изменится.

Следует также учитывать, как движение подразделения должно влиять на значение department_nth: если «Информация управления» имеет четыре сотрудника, а первая переходит к «Соответствие», если другие перенумеровать? Или они будут придерживаться 2, 3, 4 без 1?

+0

Спасибо за ответ на ур. Ну, придя к ур вопросу, другие сотрудники не будут Помните, что эта идея генерации employee_id - это идея моего клиента. Придя к ответу на ур, какая разница между department_id и department_nth (кроме того, что они принадлежат к разным таблицам)? Есть ли способ генерировать employee_id в том, как я упомянул в вопросе (предполагая, что сотрудники не изменят свой отдел). Спасибо, еще раз –

+0

«department_id» - уникальный ключ, принадлежащий отделу, тогда как 'department_nth' - это позиция, (первый сотрудник = 1, второй = 2 и т. д.), это уникально для каждого отдела, но не уникально по всем отделам. Да, если вы хотите использовать первичный ключ строки, n вы можете иметь первичный ключ, на который вы ссылаетесь. Однако в реальной ситуации вы не можете предположить, что сотрудники не изменят отдел. – halfer

+0

«Собственно, эта идея генерировать employee_id - это идея моего клиента» - это, как правило, не является хорошей причиной для чего-то. Если они не участвуют в интеграции с другой системой и не имеют опыта в этой области, используйте обычные ЦП и покажите номер косметического сотрудника на экране, где бы вы ни нуждались. – halfer

Смежные вопросы