日期:2014-05-18  浏览次数:20485 次

数据库设计的问题
我在做高校人事管理系统.
        每个教职工都有个唯一的工号,工号由省,市,高校,学院,系等各种编号组成,为了把系统做成容易扩展,如碰到学校编号或学院编号改变,不可能把每个教职工的工号一个个改.
        所以不知道用什么方法来实现这个功能呢,方便正确的改变教师原有的工号呢?

------解决方案--------------------
想到两个办法:
1。 可以把省,市,高校,学院,系等各种编号分别存储,在程序中取出各个值,再进行连接。这样会比较麻烦,而且,效率可能会比较低。
2。 还是把省,市,高校,学院,系等各种编号分别存储在一个表中,另外一个表中存储教职工的属性值(包括工号)。工号由程序取前个表中的数据生成。遇到修改的时候,修改前表,然后重新生成工号。
这样就可用实现了

------解决方案--------------------
我给你一个类似的例子。

如果字符长度为1,就在前面加0,升级为两位。例如:101.01.1.3转换为101.01.01.03,最后一位也要判断进行升级。

代码如下(创建了一个存储过程):
create table table1(id int IDENTITY(1,1) PRIMARY KEY,name varchar(50))
go
insert table1 values( '101.01.1.3 ')
insert table1 values( '101.1.01.3 ')
insert table1 values( '101.3.1.3 ')
insert table1 values( '101.01.2.3 ')
insert table1 values( '101.1.5.3 ')
go
create proc pUpgrade
@id int
as
declare @len int
declare @place1 int
declare @place2 int
declare @place3 int
declare @char12 varchar(10)
declare @char23 varchar(10)
declare @char34 varchar(10)
declare @newchar12 varchar(10)
declare @newchar23 varchar(10)
declare @newchar34 varchar(10)
declare @newchar varchar(50)
select @len = len(name) from table1 where id = 1
select @place1 = charindex( '. ',name)
from table1
where id = 1
select @place2 = charindex( '. ',substring(name,@place1+1,len(name)-@place1)) + @place1
from table1
where id = 1
select @place3 = charindex( '. ',substring(name,@place2+1,len(name)-@place2)) + @place2
from table1
where id = 1
select @char12 = substring(name,@place1 + 1,@place2 - @place1 - 1)
from table1
where id = 1
select @char23 = substring(name,@place2 + 1,@place3 - @place2 - 1)
from table1
where id = 1
select @char34 = substring(name,@place3 + 1,@len - @place3)
from table1
where id = 1
if (@place2 - @place1 - 1) = 1
set @newchar12 = '0 ' + @char12
else
set @newchar12 = @char12
if (@place3 - @place2 - 1) = 1
set @newchar23 = '0 ' + @char23
else
set @newchar23 = @char23
if (@len - @place3) = 1
set @newchar34 = '0 ' + @char34
else
set @newchar34 = @char34
set @newchar = '101. ' + @newchar12 + '. '+ @newchar23 + '. '+ @newchar34
update table1 set name = @newchar where id = @id
go

exec dbo.pUpgrade 2
go
select * from table1 where id = 2