举个栗子
一个用户user有多个功能供选择 用户表和功能表 如 insert,update,delete 然后我做了个中间表存放一个用户对应多个功能 一个功能也同时被多个用户使用 一般添加的是时候通常用多选框选择赋予这个用户的功能 当编辑的时候要去掉改用户的某些功能或添加某些功能 先说说本人以前的做法添加的时候还好 通常会这样做public void add(user _user ,ArrayList list)
{
   事务TransactionOptions开始
     //用户添加
    int id =  用户表.Add(_user);//返回用户ID
    for(int 1=0;i<list.count;i++)
    {
        中间表.用户ID = id 
        中间表.功能ID = list[i].ToString()
       中间表.add(中间表)
    }
    事务结束
}编辑的时候就麻烦了会有好大一个方法操作
public void update(user _user ,ArrayList list//新的功能数据 )
{
     事务TransactionOptions开始
     //用户修改
    用户表.update(_user);
   //中间表修改
   第一步: 查询中间表该用户的所有功能
   第二步:对list进行遍历
   for( 查询中间表该用户的所有功能)
   {
     for( 对list进行遍历)
     {
         进行判断如果原有的功能不存在list里面就删除
      }
    }
   
   然后在添加操作遍历反一下
  for(list进行遍历)
   {
     for( 查询中间表该用户的所有功能)
     {
         进行判断如果list不存在中间表里面就添加
      }
    }
然后结束
}这样做方法很臃肿而且代码阅读性很差看上去又很脏 请教大牛们是如何设计的 最后能提供下这几案例 谢谢遍历事务

解决方案 »

  1.   

    要想代码好看,在UPDATE时可以不比较,直接删除用户全部已有功能,然后调用ADD即可。
      

  2.   

    楼主的功能表是一个功能Vs用户id做一条记录,然后多个功能的话多条记录。
    这样做没什么问题,也确实符合数据库设计的规范,但是也确实有点麻烦我的做法是功能直接拼接成一个字段与用户id对应,如"功能1,功能2,功能3"Vs"用户id",建中间表,或不建中间表都可以。然后程序里面作品接,拆分。
    路子有点野,期望有大神提供更好方法。