请问此设计方式是否合适?

现在正在开发一款erp软件.软件里面的所有逻辑都写在数据库里了(比如出库,在出库单的trigger里面处理从库存中减少库存量的逻辑)..在应用程序中,仅仅现实了人机交互.还是比如出库单,仅仅实现了收集出库信息,然后用户点审核时把出库单的状态变为已审核.真正的数据处理逻辑都放在数据库了(比如上级单据的信息反馈,下级单据的数据更改,与之相关单据的处理)..


请问这种设计方法是否合适,感觉把所有的处理逻辑都写在触发器中太脆弱.程序发布到用户后,数据库里面的东西都是很容易被更改的,不稳定.而且在开发过程中,因为有些逻辑是比较复杂的,触发器层层触发,可能达到10多层,甚至是递归.查错与版本都不好控制.请高手们给出自己的意见!!
...全文
123 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
bloodish 2010-11-11
  • 打赏
  • 举报
回复
如果你对使用存储过程处理业务逻辑掌握的炉火纯青,也没有什么不可以的.

  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wdzr_826 的回复:]
是比较脆弱,最致命缺点就是不容易维护。
[/Quote]

现在最大的感觉也是这个.. 不好维护与查错..
zsc970 2010-11-11
  • 打赏
  • 举报
回复
楼主对数据库的应用是得以应手呀,真利害,可惜太过了.
wdzr_826 2010-11-11
  • 打赏
  • 举报
回复
是比较脆弱,最致命缺点就是不容易维护。
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 gsuner 的回复:]
奇怪的想法不要用,因为事物都有自身逻辑,写程序不是一天两天的发展历史了,该怎么写前人总结的方式不会错。你要创新,不是在方式上创新。好比走路,大家都两条腿,你偏偏要创新,一条腿走,走远了就知道了,一条腿要比两条腿累得多。刚不久看到有个系统,数据库表、字段、程序对象、方法、属性都用中文,一条注释都没有。看起来那个辛苦呀!
[/Quote]

嗯,谢谢你的建议!!!
gsuner 2010-11-11
  • 打赏
  • 举报
回复
奇怪的想法不要用,因为事物都有自身逻辑,写程序不是一天两天的发展历史了,该怎么写前人总结的方式不会错。你要创新,不是在方式上创新。好比走路,大家都两条腿,你偏偏要创新,一条腿走,走远了就知道了,一条腿要比两条腿累得多。刚不久看到有个系统,数据库表、字段、程序对象、方法、属性都用中文,一条注释都没有。看起来那个辛苦呀!
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dongxinxi 的回复:]
宁愿写存储过程事务也不用触发器
还有,数据库中的逻辑运算(比如什么if..else; case when else end)的效率没有应用程序中那么高,个人觉得总体的流程应该体现在程序里,个别模块的具体业务处理可以放在存储过程中
[/Quote]

呵呵,现在的情况是,写了存储过程,还是在触发器中引用..
  • 打赏
  • 举报
回复
宁愿写存储过程事务也不用触发器
还有,数据库中的逻辑运算(比如什么if..else; case when else end)的效率没有应用程序中那么高,个人觉得总体的流程应该体现在程序里,个别模块的具体业务处理可以放在存储过程中
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kscode 的回复:]
强悍的人。
如果你什么都采用触发器,还是层叠触发器。你应该考虑以个问题
触发器默认是事物级别的,会锁定表,如果系统频繁操作数据库,你
是准备让程序死锁到天荒地老咯
[/Quote]

呵呵,不是我决定要用触发器的,我是在开发过程中觉的不妥,但又不能很清楚的说明不妥在那里,项目经验太少,所以来请教一下大家.
kscode 2010-11-11
  • 打赏
  • 举报
回复
触发器我一般是这样用的,只有当数据必须级联,并且被触发的那个表的数据在单独的功能模块
中并没有给实现才采用
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 q107770540 的回复:]
这对后期维护人员是一种考验
[/Quote]

后期维护人员需要非常清楚每步数据的下一步的流向,还需要非常熟悉数据库结构,然后快速准确的到对应的触发器中去找..
kscode 2010-11-11
  • 打赏
  • 举报
回复
强悍的人。
如果你什么都采用触发器,还是层叠触发器。你应该考虑以个问题
触发器默认是事物级别的,会锁定表,如果系统频繁操作数据库,你
是准备让程序死锁到天荒地老咯
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pcqpzq 的回复:]
开发周期会增加n倍,调试会使你变神经,维护升级会死人,另外你试试测试一下并发性能!
[/Quote]

因为现在是开发阶段,调试问题最明显了,如果计算出错了,不是自己写的代码,基本找不出出错的地方.
lonyjianhui 2010-11-11
  • 打赏
  • 举报
回复
学过ERP,但是忘记了,我认为业务层的东西都应该写在程序里,而不要放在数据库里,这是对客户和自己最基本的保护方式
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 honkerhero 的回复:]
是不是有点极端啊,逻辑都在数据库,程序做什么啊,性能不好吧
[/Quote]

程序现在做的是:1,显示结果 2,反馈用户动作到数据库,数据库再处理数据逻辑.
  • 打赏
  • 举报
回复
不合理,触发器最好不要用在普通的业务中
q107770540 2010-11-11
  • 打赏
  • 举报
回复
这对后期维护人员是一种考验
pcqpzq 2010-11-11
  • 打赏
  • 举报
回复
开发周期会增加n倍,调试会使你变神经,维护升级会死人,另外你试试测试一下并发性能!
honkerhero 2010-11-11
  • 打赏
  • 举报
回复
是不是有点极端啊,逻辑都在数据库,程序做什么啊,性能不好吧

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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