我想为我的项目生成唯一的标识号。我有两张桌子:
我已将“部门”的主键定义为:
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。:我经过深入研究后发现了这个问题,并尝试编写这些东西。
答案 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
?