到底该怎么弄,有木有人能说下,有木有,有木有

畅游JAVA 2011-04-05 05:04:48
一共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.据说该用视图,但是不是很明白。

望高人指点
...全文
254 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kanepan 2011-04-07
  • 打赏
  • 举报
回复
也不要一味否定冗余, 数据量大的时候,有时候冗余一下也是有必要的
致知Fighting 2011-04-07
  • 打赏
  • 举报
回复
解决:
1、使用触发器,当A表有更新时同时更新其他的表,保持一致性

2、代码层手动加吧:当A更新时同时手动更新其他表

3、重新设计吧,这种原因一般都是设计阶段的问题,这种设计太太太蛋疼了有木有!!!!不仅是写的时候会很蛋疼,将来维护起来会更蛋疼的有木有!!
蒙面客 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dragonsky_w 的回复:]
其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;

数据库的三范式:
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包……
[/Quote]
+1
严格遵照三大范式。。。
畅游JAVA 2011-04-07
  • 打赏
  • 举报
回复
哎,求师傅
qingyuan18 2011-04-07
  • 打赏
  • 举报
回复
这是谁设计的表?为什么会这这么严重的冗余?

如果A,B之间存在包含关系,B表包含A表的主键字段即可,为什么会把A表的所有字段都包含在B表中,这样A表还有什么存在的意义呢?

数据建模层都没做好,应用层写程序当然更乱了,唉
Valefish 2011-04-07
  • 打赏
  • 举报
回复
用的ibatis
镶套层处理
Valefish 2011-04-07
  • 打赏
  • 举报
回复
放在事务处理 不行?
  • 打赏
  • 举报
回复
用级联更新。
畅游JAVA 2011-04-07
  • 打赏
  • 举报
回复
用的ibatis,如果是直接用id,实体没相应的属性,怎么好赋值呢
burningbloog 2011-04-07
  • 打赏
  • 举报
回复
触发器 级联修改,级联删除
畅游JAVA 2011-04-07
  • 打赏
  • 举报
回复
实际上是这样的,有七八个表都是这种关系。
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)
加了这个可以方便查询,不然就有七表联合查询。就是更新的时候,会有问题。呃
j2eesungch 2011-04-07
  • 打赏
  • 举报
回复
触发器 级联修改,级联删除
qm4050 2011-04-07
  • 打赏
  • 举报
回复
修改的话还是触发器吧,查的话,如里多的话,冗余或视图都可以
coooliang 2011-04-07
  • 打赏
  • 举报
回复
呵呵 后面的表 像是包含了前面的表

那最后 不就只需要一个表了。。



liu4306518 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xianaofei 的回复:]

其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;

数据库的三范式:
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;
第三范式(3NF)要求一个数据库表中不包含已在其它表中已……
[/Quote]
这数据设计的真的很蛋疼啊。
i李小武 2011-04-06
  • 打赏
  • 举报
回复

数据库设计的很蛋疼!
xianaofei 2011-04-06
  • 打赏
  • 举报
回复
其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;

数据库的三范式:
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.
畅游JAVA 2011-04-06
  • 打赏
  • 举报
回复
最开始想错了,该到sql那去操作,我都是在页面去操作的。用<c: 标签
sky_sa 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lh_fengyuzhe 的回复:]

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


同意!+ +
dragonsky_w 2011-04-06
  • 打赏
  • 举报
回复
其实你的B表里完全可以没有A表中的NAME字段,C表中可以没有B表中的NAME字段及A表中的ID和NAME字段,用级联就可以了,并且,你的数据库设计严重违反了数据库的三范式;

数据库的三范式:
第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项;
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分;
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.
加载更多回复(8)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧