为了账号安全,请及时绑定邮箱和手机立即绑定

在存储过程中保持SQL相对于代码的利弊是什么?

/ 猿问

在存储过程中保持SQL相对于代码的利弊是什么?

慕莱坞5435954 2019-07-02 15:01:38

在存储过程中保持SQL相对于代码的利弊是什么?

在C#源代码或存储过程中保留SQL的优点/缺点是什么?我一直在和一个朋友讨论我们正在进行的开源项目(C#ASP.NETForum)。目前,大多数数据库访问都是通过在C#中构建SQL内联并调用SQLServerDB来完成的。所以我试图确定,对于这个特定的项目,哪一个是最好的。

到目前为止,我已经:

守则的优点:

  • 维护起来更容易-不需要运行SQL脚本来更新查询
  • 更容易移植到另一个DB-没有pros到端口

储存产品的优点:

  • 性能
  • 保安


查看完整描述

3 回答

?
慕斯王

我不喜欢存储过程

存储过程更易于维护,因为:*您不必在需要更改某些SQL时重新编译C#应用程序。

如果数据类型发生变化,或者您希望返回一个额外的列,或者其他什么的,您最终都会重新编译它。您可以从应用程序下面“透明地”更改sql的次数总体上是相当少的。

  • 最后,您将重用SQL代码。

编程语言,包括C#,有一个很棒的东西,叫做函数。这意味着您可以从多个地方调用相同的代码块!太棒了!然后,您可以将可重用的SQL代码放入其中之一,或者如果您想获得真正的高技术,可以使用一个为您服务的库。我相信它们被称为ObjectRelationalMappers,现在已经相当普遍了。

当您试图构建一个可维护的应用程序时,代码重复是您所能做的最糟糕的事情!

同意,这就是为什么仓库是一件坏事。将代码重构和分解(分解为较小的部分)为函数比将SQL分解为.块SQL?

您有4台Web服务器和一堆使用相同SQL代码的windows应用程序,现在您意识到SQL代码有一个小问题,所以您宁愿.在1处更改proc或将代码推送到所有web服务器,在所有windows框上重新安装所有桌面应用程序(ClickOnce可能会有所帮助)。

为什么Windows应用程序直接连接到中央数据库?这似乎是一个巨大的安全漏洞,也是一个瓶颈,因为它排除了服务器端缓存的可能性。它们不是应该通过Web服务或类似于您的Web服务器进行连接吗?

那么,推出一个新的sproc,还是4个新的web服务器?

在这种情况下更容易推动一个新的sproc,但在我的经验中,95%的“推送更改”影响代码,而不是数据库。如果你那个月把20件事推到网络服务器上,把1件事推到数据库上,那么如果你把21件事推到网络服务器上,把0件东西推到数据库里,你几乎不会损失很多。

更容易检查代码。

你能解释一下怎么做吗?我不明白。特别是由于spros可能不在源代码管理中,因此不能通过基于web的SCM浏览器访问,等等。

更多的缺点:

Storedprocs生活在数据库中,在外界看来,它是一个黑匣子。简单的事情,比如想把它们放在源代码管理中,就变成了一场噩梦。

这也是纯粹努力的问题。把所有的东西分解成一个百万层如果你想向你的首席执行官证明为什么要花700万美元来建立一些论坛,但否则,为每件小事创建一个商店只是额外的额外工作,却没有任何好处。


查看完整回答
反对 回复 2019-07-02
?
慕码人8056858

目前正在其他几个线程上讨论这个问题。我是存储过程的一贯支持者,尽管有人为Linq到SQL提供了一些很好的论据。

将查询嵌入到代码中,将您与数据模型紧密地结合在一起。存储过程是一种很好的契约编程形式,这意味着只要存储过程的输入和输出所表示的契约得到维护,DBA就可以自由地更改过程中的数据模型和代码。

当查询被隐藏在代码中而不是集中在一个中心、易于管理的位置时,优化生产数据库可能非常困难。

[编辑]这里是另一个当前讨论


查看完整回答
反对 回复 2019-07-02
?
饮歌长啸

在我看来,你不能在这个问题上投赞成票或反对票。这完全取决于应用程序的设计。

我完全反对在3层环境中使用SPS,因为前面有一个应用服务器。在这种环境中,您的应用程序服务器可以运行您的业务逻辑。如果您另外使用SPS,您将开始在整个系统中分发业务逻辑的实现,并且将变得非常不清楚谁对什么负责。最终,您将得到一个应用程序服务器,它将只执行以下操作:

(Pseudocode)Function createOrder(Order yourOrder) Begin
  Call SP_createOrder(yourOrder)End

最后,您可以在这个非常酷的4Server集群上运行您的中间层,每个集群都配备了16个CPU,它实际上什么也做不了!多浪费呀!

如果您有一个可以直接连接到DB或更多应用程序的胖GUI客户机,那么情况就不同了。在这种情况下,SPS可以充当某种伪中间层,将应用程序与数据模型解耦,并提供可控制的访问。


查看完整回答
反对 回复 2019-07-02

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信