2011-04-26 55 views
2

当我第一次进入数据库时​​,我正在使用SQL Server。我最初用传统的ASP进入了它。我们被告知的一件重要事情是,如果您使用存储过程,而不是使用ASP SQL命令(我认为这样做),那么您在SQL事务中节省了大量时间。所以几乎所有我想要用数据库编写存储过程,然后从我的代码中调用存储过程。在MySQL中存储函数 - 值得吗?

无论如何,快进几年了,我现在正在用PHP和MySQL(以及一个小Python)来完成我所有的工作。有一件事我看起来似乎没有多大意义,那就是使用存储过程/函数的人,所以我并没有真正担心它。

但是,我发现我只是做错了,并没有意识到它。在MySQL中使用存储函数有什么主要优势?我正在构建一个处理大量对数据库的调用的相当大的网站。这些调用都是在我的PHP代码中完成的。我会更好地使用存储的函数进行一致的调用,然后将变量传递给PHP中的函数?

回答

4

嗯,这要看情况。存储过程是处理功能分解的一种方式,如果您有多个应用程序与同一个数据库进行交互,那么它是绝对必要的。使用存储采购的想法在几年前处于领先地位,随着全球已经转向服务/ RAD世界,他们正在失去一些地位。

一些存储过程的好处是

  1. 重用/这当然可以你的代码库中完成,但它打败了地狱编写相同的查询10次加入15倍

  2. 安全 - 当sp是愤怒的SQL注入攻击前来和减少您的曝光的一种方法是提供参数化SP,在大多数情况下,自动输入消毒

  3. 按照定义在真正大型数据库表格布局上的文档并不总是足以解释您正在存储的内容以及SP为什么并且有时会给您和那些在您之后产生的内容

  4. 定义的接口。

我认为所有这些专业人员都可以提供假设良好的应用程序设计,并且只在某种程度上使项目具有一定程度的场景。

一些缺点

  1. 冗余功能 - 我已经看到了很多商店,其中商业和CRUD逻辑在应用程序和业务逻辑的传播是在数据库中。

  2. 缺乏对SP的配置管理 - 虽然已有用于代码SP管理的已建立的程序和工具远远落后。

+0

“几年前”?我已经看到他们多年来一直在衰落。 – Xailor 2011-04-26 18:24:30

0

我的理解是,存储过程和从您选择的语言中准备的语句通常在计算上是等效的。

不管我如何应对,这是已被打死亡之前(在这个非常的网站)圣战问题:MySQL Stored Procedure vs. complex query

0

这是问同样的问题,“我要打破我的代码插入方法/功能/过程,并呼吁他们,或者我应该一切编码到我目前的功能?”

一些存储过程给你的优势:

  1. 更容易的测试。您可以在不运行应用程序的情况下测试存储过程。
  2. 更容易开发。您可以让数据库开发人员编写存储过程和GUI开发人员编写UI等。
  3. 更轻松地移植到不同的数据库。所做的更改都包含在数据库中,并且与应用程序的契约(传递给存储过程的参数)不应更改。
  4. 能够从多个前端使用存储过程中的逻辑。您无需在每个需要创建新客户的应用程序中编写相同的客户创建逻辑。

最大的缺点是你必须学习多个外形,可能使用多种工具。这是在.Net中使用Linq for SQL的一个重要原因。您不必学习SQL,并且所有内容都包含在.Net代码中。

我们对所有东西都使用存储过程。它工作得非常好。抽象是你的朋友。

+0

我认为还有一个缺点:可伸缩性。数据库可能是体系结构最难扩展的部分。它可以完成,但比添加更多PHP或Java服务器更具挑战性。因此,如果可扩展性是一个问题,您可能需要平衡您的业务逻辑放入数据库服务器的多少,以及如果在Web /应用程序服务器之间扩展的话可能会更好地扩展。 – Marvo 2011-04-26 18:09:58

+0

版本控制怎么样?如果SQL位于源代码内部,对SQL的更改将存储在源代码库(SVN,CVS等)中。 – Michael 2011-04-26 18:23:02

+0

Michael,我们的所有存储过程源代码都在TFS中。如果SQL存储在应用程序的源代码中,那么管理更容易。 – 2011-04-26 19:57:25