诸如职务,职称,学历这类信息,当存到员工档案表中时,是存名称好呀,还是建一个对照表,在员工信息表中存编码呀。
诸如职务,职称,学历这类信息,当存到员工档案表中时,是存名称好呀,还是建一个对照表,在员工信息表中存编码呀。 
 ------------------ 
 比如存名称,比较好设计: 
 结构如: 
 编号,姓名,职务,职称,学历 
 001,张三,科长,工程师,大本 
 002,王二,处长,技师,中专   
 比如存编码,设计复杂些。先要建对照表:以学历对照表举例 
 学历对照表: 
 01,中专 
 02,大专 
 03,大本 
 则上面表如下显示(这里只将学历字段显示) 
 编号,姓名,职务,职称,学历 
 001,张三,XX,XX,03 
 002,王二,XX,XX,01   
 不知以上设计思路,哪种更好些。 
 规范的设计原则是什么?
------解决方案--------------------对照表好点
------解决方案--------------------如果员工档案表数据量不大,可以建名称, 
 如果数据量巨大,建议采对照表方法
------解决方案--------------------映射表最好!
------解决方案--------------------個人建議用對照表
------解决方案--------------------看到很多商用软件,其实好多类似信息也是不存编码的,直接存名称.即不建楼主所说的对照表
------解决方案--------------------个人倾向于怎么简单怎么来。毕竟现在服务器性能在多数情况下已不需要在这方面去斤斤计较了。
------解决方案--------------------第一种方法便捷,简单,直接存名称,保存、查询起来相对方面。 
           缺点:如果职务中的“科长”根据客户的需要要改为“主管”,那操作人员需要对每一条记录进行修改保存,如果数据量大的话,呵呵,有的改了。   
 第二种用对照表,每次查询都要 JOIN每个对照表,比较累点,但是可以解决第一种建立的视图的缺点。
------解决方案--------------------数量少,建议用参照表,这样用户输入也方便,点下鼠标就行了。
------解决方案--------------------如果数据量是百万级的建议这样用(曾经参加过一个百万级的项目): 
 用对照表 但实际一个对照表就足够了  
 例:t_user表 username,usersexid,userpostid 
              张三      0        0  
              李四      1        1 
 t_code表 id(自增序列)flag(类型)  codeid(具体类型值) meaning(含义) 
              0               1          0                    男 
              1               1          1                    女 
              2               2          0                    科长 
              3               2          1                    处长   
 在sql 2000 中编写一个函数   
 --根据类型值和codeid得到 相应的中文含义 
 CREATE FUNCTION F_GetMeaning 
  ( 
 	@flagid nvarchar(30), 
 	@CodeID nvarchar(30) 
 ) 
 RETURNS varchar(500)AS   
 BEGIN  
 	DECLARE @Result varchar(1000)  
 	SET @Result =  ' ' 
 	SELECT @Result = meaning from t_code where flag= @flagid and codeid = @CodeID 
 RETURN @Result 
 END   
 查询语句:select username as 姓名,dbo.F_GetMeaning(1,usersexid) as 性别,dbo.F_GetMeaning(2,userpostid) as 职位 from t_user 
 查询结果:姓名 性别 职位 
           张三  男  科长 
           李四  女  处长   
 这样写有个好处就是 即使以后科长改成主任了 你只需要改t_code表就可以了。     
------解决方案--------------------查询语句:select username as 姓名,dbo.F_GetMeaning(1,usersexid) as 性别,dbo.F_GetMeaning(2,userpostid) as 职位 from t_user 
 查询结果:姓名 性别 职位 
           张三  男  科长 
           李四  女  处长   
 这样写有个好处就是 即使以后科长改成主任了 你只需要改t_code表就可以了。 
 ----------------------- 
 这样写的好处是代码简洁,不用进行多次连接操作了.可是不知这样做的效率如何? 
 我觉得这样可能效率会比较低,不知楼上朋友如何看,呵. 
------解决方案--------------------对照表好些...以后加新元素..或改也方便
------解决方案--------------------看来大我建义用对照表,可是这样的话,每次查询时都要进行若干次连接操作呀,如: 
 select a.编号,a.姓名,a.学历编码,b.学历名称,a.职称编码,c.职称名称,a.职务编码,d.职务名称 
 from 员工表 a left join 学历表 b on (a.学历编码=b.学业历编码) 
 left join 职称表 c on(a.职称编码=c.职称编码) 
 left join 职务表 d on (a.职务编码=d.职务编码)   
 大家看,仅显示三个字段就要连接三个对照表呀。如果表中有几十个字段就要连接几十个对照表呀。 
 所以总觉得这种设计还是有问题的。大家请指教。   
 ===========================================