一共20来张表,其实有7个表是一层套一层的关系。
比如,A (ID,NAME),B(ID,NAME,A.ID,A.NAME),C(ID,NAME,B.ID,B.NAME,A.ID,A.NAME)以前我B,C表里,就只放了其它表的ID,后来发现页面显示的时候,要去循环,很麻烦。于是加了NAME
但现在比如说,A更新了NAME,但是B,C里的就没有更新。我想了以下几种办法:
1.在更新A的NAME的时候,同时更新B,C里的相应 A.NAME
2.B,C显示的时候,还是去循环,通过ID显示。
3.据说该用视图,但是不是很明白。望高人指点

解决方案 »

  1.   

    三种方法都可以,最后一种方法和第二种方法是一样的,只不过视图是提前准备好的SQL查询而已。如果读频繁,写的机会少,用触发器,第一种方案是比较好的。
      

  2.   

    BC里面就不需要加Name了,这样太冗余了。
    你显示BC的时候为什么要循环啊,同时关联表查出来不久结了。
      

  3.   

    感觉你还是用Hibernate比较好,直接1对1或者1对多级联就简单多了。
      

  4.   

    有必要再中间表加一个name吗?这不是重复了吗?
    在 中间表只要存在映射id
    查询的时候关联,你再觉得麻烦也没办法,不然你的数据库会无比臃肿
      

  5.   

    就放个关联的id就行了想少写代码可以这样把表名和id以及name写的有规律些比如表tablea:tablea_id,tableb_name表tableb:tableb_id,tableb_name...然后写个方法,传入表名,自动返回sql语句或者查询结果
      

  6.   

       首先的设计思路就有问题  ,你这样设计很多冗余数据    你既然设置了 为什么还要加name啦  你直接表关联查询不就行了啊        还有就是你要修改的时候  只需修改一主表就行了   你这样的话 不是每个表都要改 典型的冗余数据    
      

  7.   

    其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;数据库的三范式:
    第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;
    第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;
    第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.
      

  8.   

    最开始想错了,该到sql那去操作,我都是在页面去操作的。用<c: 标签
      

  9.   

    其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;数据库的三范式:
    第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;
    第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;
    第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.
      

  10.   

    用的ibatis,如果是直接用id,实体没相应的属性,怎么好赋值呢
      

  11.   

    用的ibatis 
    镶套层处理
      

  12.   

    这是谁设计的表?为什么会这这么严重的冗余?如果A,B之间存在包含关系,B表包含A表的主键字段即可,为什么会把A表的所有字段都包含在B表中,这样A表还有什么存在的意义呢?数据建模层都没做好,应用层写程序当然更乱了,唉
      

  13.   

    实际上是这样的,有七八个表都是这种关系。
    A (ID,NAME,XX,XX,XX),
    B(ID,NAME,A.ID,A.NAME,XX,XX,XXX,XXX),
    C(ID,NAME,B.ID,B.NAME,A.ID,A.NAME,XXX,XXX,XX,XXX),
    D(ID,NAME,C.ID,C.NAME,B.ID,B.NAME,A.ID,A.NAME,XXX,XXX,XX,XXX)
    加了这个可以方便查询,不然就有七表联合查询。就是更新的时候,会有问题。呃