你为什么就不能
RecordID Time         StaffID  ClientID  assignment 
1   2004-12-12    1 1 网络维护
1   2004-12-12    2 1 网络维护
这样来提交你的数据库呢?何必搞得如此麻烦?也许我板你的问题想简单了!也许是你自己想复杂了!

解决方案 »

  1.   

    楼主的解决方按很好啊,我觉得这样设计十分标准。至于关联问题,只要在删除的时候多一个语句不就行了吗。
    哎,都是因为mysql没有主外键。。
      

  2.   

    楼主的解决方案有些烦琐,且不易维护。推荐的方案有二
    1、如 leyan728(乐言) 所说分开用多条记录保存
    2、维持原方案,查询时用find_in_set函数,如
    select * from staff,record where find_in_set(staff.StaffID,record.StaffID);
    将得到
    StaffID StaffName RecordID Time       StaffID ClientID assignment 
    1       张三      1        2004-12-12 1,2     1        网络维护 
    2       李四      1        2004-12-12 1,2     1        网络维护 
    3       王五      2        2004-12-13 3       2        上门配置交换机 
    1       张三      3        2004-12-14 1,3     3        协助杀毒 
    3       王五      3        2004-12-14 1,3     3        协助杀毒 附以其他手段即可方便的满足你的要求
      

  3.   

    to xuzuning(唠叨)
    谢谢你的回复,我的解决方案确实不利于维护,仅仅在做复杂查询的时候就遇到了许多的问题。看来我是把问题搞复杂了,个人觉得您提出的第二种方案(查询时使用find_in_set函数)比较适合我的需求,我正在改我的代码,如有不明白的地方,还要再向大家讨教。
      

  4.   

    突然想到一个问题想请教大家,采用xuzuning(唠叨)  推荐的第二种方法时
    如果我的员工信息数据库表:staff存在超过10个员工,如  
    StaffID  StaffName  
    1                张三  
    2                李四  
    3                王五  
    ……
    11               无名那么,如果我想查询ID为1的张三的工作记录时
    执行
    select  *  from staff,record  where  find_in_set(1,record.StaffID);
    那么结果也会把 无名 的工作记录查询出来
    因为find_in_set(1,record.StaffID)会把所有包含字符串为1(包括11)的记录查询出来,这该怎么办呀?我想到一个笨方法:
    维修记录数据库表record的StaffID字段采用这种格式进行存储:1|2|11|
    以后如果单独查询一个人的记录就执行find_in_set(1|,record.StaffID)
    呵呵,不过感觉这种方法好像不太正规呀!