其实还是一个数据库设计的问题:会议记录。我想一般设计应该如下,涉及这么几个表:
T1:会议记录表
   会议时间,员工编码
T2:员工编码表
   员工编码,部门编码,员工姓名
T3: 部门编码表
   部门编码,部门名称
最终对用户的显示为:会议时间,员工姓名,部门名称。现在问题来了:张三在第一年参加了一次会议,当时属于财务部,那么在会议记录表对用户的显示中应该显示为:2007,张三,财务部
              第二年张三又去了办公室,当然需要在员工编码表中修改其部门编码,那么此时再显示去年那次会议,就成了:2007,张三,办公室
这就不对了,虽然张三此时属于办公室,但在开会的时候是属于财务部的。
当然可以在会议记录表中增加‘部门名称’字段,但这样似乎就比较冗余了,
还有其他的解决办法吗,大家讨论讨论,全当消遣:)

解决方案 »

  1.   

    少写了几句:为了避免楼主说的那样问题出现,部门信息就必须记录,这样不管T2和T3表中的记录如何变化,由于查询会议记录时根本不会关联T2和T3表,也就不会因为人员信息的变化对会议记录的查询结果有影响
      

  2.   


    也说的太搞了吧,如果按照你说的这样做的话,到时候写的那个复杂的sql(要根据时间来做判断,如果有个人没事总换部门的话,你岂不是要写的累死)耗费的性能还不如加那个冗余的字段。不知道楼主凭什么标准来说某个字段是否是冗余字段,其实设计数据库,不是只针对一个操作来说的,是针对所有的操作查询的一个平衡来设计的,如果查询超快,保存超慢,数据还是设计失败。
      

  3.   

    在第一张表里增加部门编码以后,
    会使会议记录表达到3NF但不满足BCNF到底要达到哪种范式,得看设计者意愿
    一般都会建议至少达到3NF可以考虑两种做法一是把会议记录表拆成两个表:T1-1:会议记录ID,部门编码,会议时间
    T1-2:会议记录ID,员工编码二是像火龍说的那样,新建一张员工所属部门表
    T4:员工部门ID,员工编码,部门编码
    T1: 会议记录ID,员工部门ID,会议时间
      

  4.   

    T1:会议排单表 
      会议时间,员工编码 
    T2:员工编码表 
      员工编码,部门编码,员工姓名 
    T3: 部门编码表 
      部门编码,部门名称 
    最终对用户的显示为:会议时间,员工姓名,部门名称。T4: 会议签到表
      会议时间,员工编码,部门ID
      

  5.   

    简单
    增加一个 部门调动记录表 
    员工ID 原部门ID 新部门ID 时间 
    生成报表的时候关联这个表 来取当时的部门
    其他如职位 职务也可以这样处理 
      

  6.   

    T1:会议记录表 
      会议时间,员工编码 
    T2:员工编码表 
      员工编码,部门编码,员工姓名 可在T1表中增加 会议时部门编码.