关于存储过程的访谈问题

时间:2010-06-14 00:31:38

标签: sql

存储过程中不存储哪些内容?

5 个答案:

答案 0 :(得分:9)

这不是关于是否使用存储过程的问题。这是一个假设的面试问题。面试官希望您确信您了解SP不是代码和数据的倾销场所,这些代码和数据更适合系统中的其他位置。

合理的答案可能包括以下内容:

  • 数据,例如常量或特定于客户端的逻辑,永远不属于SP。
  • 密码或其他安全令牌永远不属于SP或任何代码。
  • 复杂处理可能不适合今天相当原始的SP语言。
  • 业务逻辑可能更适合中间层而不是SP,因为语言的表达性,可维护性,OO设计或其他因素存在差异。
  • 演示文稿图层代码可能最适合用户界面,而不是SP。

对于这样的面试问题,目标不是确定一个真正正确或不正确的反应。相反,面试官心中有他的理想的回答,你的工作就是确定回应。如果你的面试官是一名DBA,管理一个DBA小组,或者看起来强烈要求他们使用以DB为中心的方法,那么你可能希望淡化SP语言的弱点,并跳过建议以避免复杂的业务逻辑。数据库。这些辩论有时间和地点,但不是在你的面试中!

答案 1 :(得分:3)

我认为这是另一种情况,答案是:“它取决于”。首先,要回答的真正问题可能是:“我计划/愿意转移到数据库的业务逻辑是多少?”。

这是因为您可以在存储过程(sprocs)中实际拥有数据库中的所有业务逻辑,其中您的sprocs通常与应用程序的UI或API具有紧密的一对一映射。在这种情况下,您可能会使用LoginUserValidateSessionCommitPurchase等名称的sprocs。

另一方面,您可以让您的sprocs充当瘦数据访问/操作层,其中真正的业务逻辑位于应用程序框架中的其他位置,而sprocs只是一组美化{{3}运营商。在这种情况下,您的sproc名称可能看起来更像GetListOfUsersGetTop100UsersInsertUser等。

这两种方法有各种优点和缺点,一种方法或另一种方法的可行性在很大程度上取决于具体情况。以下是关于此主题的一些相关Stack Overflow帖子:

现在关于您的实际问题,如果您的业务逻辑将位于数据库中,那么存储过程中可能不存在(或不存在)任何内容。另一方面,对于类似CRUD的sprocs,我认为除非确保数据正确和一致所必需的,否则它们应该没有任何内容。

答案 2 :(得分:2)

存储过程本身不存储数据。

答案 3 :(得分:1)

Select ^ From Table

修改

好的,这是一个温和的无聊和舌头检查答案。

存储过程中应该包含的内容:

我个人不会在存储过程中存储非常简单的查询,除非该查询被大量调用。例如,如果我在程序开始时调用数据库版本检查,并且我只在Select version from DataVersion之类的语句中返回单点数据。这可能不是你应该从存储过程调用的东西。如果您有一个SP来简单地获取单个数据点,它会为代码添加一小部分模糊处理。这并不是说如果它是一个简单的查询,它不应该在存储过程中。

一次性查询,在存储过程中几乎没用。你为什么要存储你只会使用一次的东西。

非常动态的查询在存储过程中无法正常工作。我花了很多时间查看复杂的存储过程,如果它们被移入程序本身,可以简化很多。现代语言支持更好的动态查询开发方式,这是非常正确的。

答案 4 :(得分:0)

  

存储过程“定义一次,   多次使用。“如果有任何变化   必要的,(唯一的)   存储过程的定义   必须更换。动态SQL,   当然,允许任何SQL查询   随时发布。任何改变   存储过程立即影响   所有其他软件,报告,   等(DBMS内部或外部)   直接或间接指的是   它。它并不总是可能的   确切地确定究竟是什么   这些影响将是,也不是   可以安全地进行更改   对其他事情造成不利影响。

http://en.wikipedia.org/wiki/Stored_procedure