通过连接两个数字生成唯一标识

时间:2016-03-05 16:37:10

标签: java

我想为我的项目生成唯一的标识号。我有两张桌子:

  1. 部门
  2. employee_details_table
  3. 我已将“部门”的主键定义为:

    department_id tinyint(2) zerofill not null auto_increment,
    

    对于“employee_details_table”,主键名为“employee_id”。 我想为这个列生成一个五位数字(或字符串)的员工ID,其中前两位数是分配给员工的department_id,后三位数实际上应该像auto_increment。

    示例:

    • 01020:应该将其分配给属于01部门的员工,他是该部门的第20名员工。

    • 03040:应该将其分配给属于03部门的员工,他是该部门的第40位员工。

    P.S。:我经过深入研究后发现了这个问题,并尝试编写这些东西。

1 个答案:

答案 0 :(得分:1)

请记住,员工可以更换公司的部门。因此,主要密钥不应该反映部门,因为员工从信息技术"到"管理信息"会强迫他们的PK改变它在数据库中的每个位置(可以像这样实现它,但被认为是不好的做法)。

相反,您应该在employee表上使用普通的自动增量PK,以便您的联接可靠,然后决定添加一个新列,其中包含他们在部门中的编号。

所以你在employee表格中也需要这个:

department_nth tinyint(2) not null,

这是非独特的,因此每个部门将有一个1,每个部门都有一个等等,直到所有部门的员工都有1..N的序列。

因此,您的员工编号是一种装饰设备:01020只是与department.department_id连接的employee.department_nth - 您无需在任何地方明确存储它。当引用数据库中的员工(即外键)时,只需使用employee_id,因为它不会改变。

同样值得考虑部门搬迁如何影响department_nth价值:如果"管理信息"有四名员工,如果其他人重新编号,第一名员工会转到合规部门吗?或者他们会坚持2, 3, 4而没有1