请教:数据一致性问题,欢迎讨论!(200分)

  • 主题发起人 主题发起人 zfmich
  • 开始时间 开始时间
Z

zfmich

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好!
在数据库应用程序开发时,经常会碰到这样的问题:基础资料定义好之后,
有可能会再有修改,这样其他有用到该基础资料的地方都必须进行相应修改,也许,
有些同志会说只要用触发器就可以完成;但是还是有一个比较麻烦的问题,如果删除该
基础资料时,对应的其他数据该如何处理?也许,由于本人没有做过大型项目,对这个
有点模糊,还望有经验的朋友帮忙指点一二,谢谢!

 
最好,主外键约束,不可删除。
程序中判断,如相关表内有此数据,不删除。
 
如果修改的数据没涉及到主外键,那么直接修改很容易;
如果修改的数据涉及到主键关键字,我用过的方法是:
1、在基础表里插入新的修改后的正确数据;
2、修改其他表单的数据,与基础表对应;
3、删除基础表里不需要的数据。
不知道你想问的是不是这个?
 
这个问题确实很烦。还没发现有好的解决方法。
 
如果数据库用Oracle,也可以通过触发器(前触发)来处理,其他数据库可能就麻烦一些了。
 
修改可以通过触发器来完成,删除时最好不要物理删除,我通常的做法都是加一个删除
标志。
 
通常做法有两种:
1、阻止外部键修改或删除(数据库参照完整性自动完成)
2、同步修改外部键(需要自己编程或编写 触发器)
根据商业规则决定如何处理。
一般情况使用1由数据库处理。
 
直接删除很不好,
基本资料一定要仔细建立,一旦建立就不能修改或删除
比如:我要查询红色的杯子有多少,在程序端已经写好,红色的代码就是002
但你现在要改变这个基本资料,你说前端要不要修改呢?
我只是举一个很普通的例子,改动基本资料产生的影响不只表现在技术上
一旦修改基本资料,必将会有大范围的改动,你可以把利害关系讲给客户
具体的决定应由项目负责人和客户协商解决
 
谢谢各位,再看看是否还有好办法。
 
to: tomol
基础资料的修改应该是允许的,前端程序设计时应该设置成从杯子颜色查询或对应出
杯子代码,不能在程序中固定死。
to: zfmich
还是应该用trigger吧
 
以商品编码为例:
1。在删除商品编码的某条记录时,先检索与之关联表里是否已经使用,
如果是,不能删除。否则能删除。
2。在修改商品编码表记录时,一定要保证已经使用的商品不能修改编码,其他内容
如商品名称,单位,类型完全可以修改的。
 
使用触发器,在删除前检查是否和此记录有关联,若有,则删除此记录的所有其他表中的记录。。
 
我看还是做关联吧。这样安全。触发器不好用
 
有谁再给点建议吗?
 
后退
顶部