问题描述
一共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.NAME2.B,C显示的时候,还是去循环,通过ID显示。3.据说该用视图,但是不是很明白。望高人指点
解决方案
解决方案二:
三种方法都可以,最后一种方法和第二种方法是一样的,只不过视图是提前准备好的SQL查询而已。如果读频繁,写的机会少,用触发器,第一种方案是比较好的。
解决方案三:
BC里面就不需要加Name了,这样太冗余了。你显示BC的时候为什么要循环啊,同时关联表查出来不久结了。
解决方案四:
这表咋这样设计撒?不解。。。
解决方案五:
只能用手工维护完整性了严重违反了第三范式,咋这么设计?
解决方案六:
感觉你还是用Hibernate比较好,直接1对1或者1对多级联就简单多了。
解决方案七:
有必要再中间表加一个name吗?这不是重复了吗?在中间表只要存在映射id查询的时候关联,你再觉得麻烦也没办法,不然你的数据库会无比臃肿
解决方案八:
就放个关联的id就行了想少写代码可以这样把表名和id以及name写的有规律些比如表tablea:tablea_id,tableb_name表tableb:tableb_id,tableb_name...然后写个方法,传入表名,自动返回sql语句或者查询结果
解决方案九:
首先的设计思路就有问题,你这样设计很多冗余数据你既然设置了为什么还要加name啦你直接表关联查询不就行了啊还有就是你要修改的时候只需修改一主表就行了你这样的话不是每个表都要改典型的冗余数据
解决方案十:
其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;数据库的三范式:第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.
解决方案十一:
引用2楼lh_fengyuzhe的回复:
BC里面就不需要加Name了,这样太冗余了。你显示BC的时候为什么要循环啊,同时关联表查出来不久结了。
同意!++
解决方案十二:
最开始想错了,该到sql那去操作,我都是在页面去操作的。用<c:标签
解决方案十三:
其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;数据库的三范式:第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.
解决方案十四:
数据库设计的很蛋疼!
解决方案十五:
引用12楼xianaofei的回复:
其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;数据库的三范式:第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;第三范式(3NF)要求一个数据库表中不包含已在其它表中已……
这数据设计的真的很蛋疼啊。
解决方案:
用的ibatis,如果是直接用id,实体没相应的属性,怎么好赋值呢
解决方案:
用级联更新。
解决方案:
放在事务处理不行?
解决方案:
用的ibatis镶套层处理
解决方案:
这是谁设计的表?为什么会这这么严重的冗余?如果A,B之间存在包含关系,B表包含A表的主键字段即可,为什么会把A表的所有字段都包含在B表中,这样A表还有什么存在的意义呢?数据建模层都没做好,应用层写程序当然更乱了,唉
解决方案:
哎,求师傅
解决方案:
引用9楼dragonsky_w的回复:
其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;数据库的三范式:第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;第三范式(3NF)要求一个数据库表中不包含已在其它表中已包……
+1严格遵照三大范式。。。
解决方案:
解决:1、使用触发器,当A表有更新时同时更新其他的表,保持一致性2、代码层手动加吧:当A更新时同时手动更新其他表3、重新设计吧,这种原因一般都是设计阶段的问题,这种设计太太太蛋疼了有木有!!!!不仅是写的时候会很蛋疼,将来维护起来会更蛋疼的有木有!!
解决方案:
也不要一味否定冗余,数据量大的时候,有时候冗余一下也是有必要的
解决方案:
呵呵后面的表像是包含了前面的表那最后不就只需要一个表了。。
解决方案:
修改的话还是触发器吧,查的话,如里多的话,冗余或视图都可以
解决方案:
触发器级联修改,级联删除
解决方案:
实际上是这样的,有七八个表都是这种关系。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)加了这个可以方便查询,不然就有七表联合查询。就是更新的时候,会有问题。呃
解决方案:
触发器级联修改,级联删除