当前位置:编程学习 > C#/ASP.NET >>

有个关于数据库字段的设计请教下大家。

员工表,有两个字段:员工姓名,员工编号。

然后有很多表 ,比如“员工保险信息表,员工奖惩信息表,员工考核信息表”等,里面都有 “员工姓名”,“员工编号”。

如果 “员工保险信息表,员工奖惩信息表,员工考核信息表”里只设置“员工编号”的话。那么每次取得“员工姓名”就得用表联合,表联合会降低效率。 如果不用表联合,则“员工保险信息表,员工奖惩信息表,员工考核信息表”每个表里面必须要有 “员工姓名” 的字段。 

那么加入员工表里的员工姓名假如修改的话, 如何在其他表里 做到级联更新删除呢? --------------------编程问答-------------------- 那么员工表里的员工姓名假如修改的话, 如何在其他表里 做到级联更新删除呢? --------------------编程问答-------------------- 给个图不就显而易见了么。你这样文字叙述,不容易懂的!~ --------------------编程问答-------------------- 顶,等高手 --------------------编程问答--------------------  用事务级联删除! --------------------编程问答--------------------   一般怎么可能每个表里都有员工姓名什么的!
 肯定是有个员工信息表啊!然后其他外键指向员工id!
这样修改员工信息就就不会影响到其他表! --------------------编程问答--------------------
引用 5 楼 hl362496158 的回复:
  一般怎么可能每个表里都有员工姓名什么的!
 肯定是有个员工信息表啊!然后其他外键指向员工id!
这样修改员工信息就就不会影响到其他表!


表联影响效率 --------------------编程问答-------------------- 呵呵!如果修改一个表的信息要跟着修改所有其他表的有关信息!!
哪种影响更大?? --------------------编程问答--------------------
引用 7 楼 hl362496158 的回复:
呵呵!如果修改一个表的信息要跟着修改所有其他表的有关信息!!
哪种影响更大??


员工姓名一般不修改,但表联合每次打开页面都要联合。。。。。 --------------------编程问答--------------------   LZ的想法确实与众不同啊!!
  我们一般数据库见表碰到这样的情况都是建一个员工信息表这是肯定的!然后使用外键什么的进行关联!
  所以在操作员工的时候就只需要操作一个员工信息表!
  按LZ的说法!我不建员工信息表!每个表里面都添加比如:员工姓名 这一列!
  你有没有想过当添加一个新员工的时候怎么办?
 每个表都添加一条新信息??? --------------------编程问答-------------------- 实现起来简单些
用事务
//执行事务处理
public void DoTran()
{  //建立连接并打开
 SqlConnection myConn=GetConn();
 myConn.Open();
 SqlCommand myComm=new SqlCommand();
 //SqlTransaction myTran=new SqlTransaction();
 //注意,SqlTransaction类无公开的构造函数
 SqlTransaction myTran;
 //创建一个事务
 myTran=myConn.BeginTransaction();
 try
 {
  //从此开始,基于该连接的数据操作都被认为是事务的一部分
  //下面绑定连接和事务对象
  myComm.Connection=myConn;
  myComm.Transaction=myTran; //定位到pubs数据库
  myComm.CommandText="USE pubs";
  myComm.ExecuteNonQuery();//操作1
  myComm.CommandText=""; //操作2
  myComm.ExecuteNonQuery();
   //提交事务
  myTran.Commit();
 }
 catch(Exception err)
 {
  myTran.rollback();
  throw new ApplicationException("事务操作出错,系统信息:"+err.Message);
  }
 finally
 {
  myConn.Close();
  }
}
--------------------编程问答-------------------- 数据冗余吧,人事的我一般设计的跟你差不多,员工编号,员工姓名之类的很少情况是要修改的,这样的话就可以删除了。员工删除可以把员工状态改成离职之类的,如果有数据关联的话一般是不允许删除的。 --------------------编程问答--------------------
引用 11 楼 pittroll 的回复:
数据冗余吧,人事的我一般设计的跟你差不多,员工编号,员工姓名之类的很少情况是要修改的,这样的话就可以删除了。员工删除可以把员工状态改成离职之类的,如果有数据关联的话一般是不允许删除的。

数据冗余有些情况还是必要的,大型系统一般是很少使用外键的,太麻烦。一个数据库有2000多张表,再用主外键关联的话就太麻烦了。 --------------------编程问答--------------------
引用 9 楼 hl362496158 的回复:
  LZ的想法确实与众不同啊!!
  我们一般数据库见表碰到这样的情况都是建一个员工信息表这是肯定的!然后使用外键什么的进行关联!
  所以在操作员工的时候就只需要操作一个员工信息表!
  按LZ的说法!我不建员工信息表!每个表里面都添加比如:员工姓名 这一列!
  你有没有想过当添加一个新员工的时候怎么办?
 每个表都添加一条新信息???


员工表当然要建,但只是取出来一个员工姓名就用表联合,划不来阿 --------------------编程问答-------------------- 有点 印度神油 (indusl)的影子
--------------------编程问答-------------------- 可以参考一下用友那B的ERP中人事模块的数据库设计 --------------------编程问答-------------------- 不要搞那么复杂,员工的姓名只要存在一个表中,其他表存储姓名表的ID即可。
一改全改。/ --------------------编程问答-------------------- 联合查询是必要的·lz不要想偷懒了· --------------------编程问答-------------------- 楼主这个“效率”取决于你的业务中,员工查询操作多,还是员工字表信息的增改操作多了。
想偷懒是不行的。 --------------------编程问答--------------------
引用 18 楼 yuangudeyu 的回复:
楼主这个“效率”取决于你的业务中,员工查询操作多,还是员工字表信息的增改操作多了。
想偷懒是不行的。


说了,员工姓名一般不用修改。
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,