有经验的程序员应该知道数据库查询吗?[关闭]


35

那里有很多程序员,他们也是查询编写和数据库设计方面的专家。

这是成为专家程序员或软件工程师的核心要求吗?

尽管查询和代码的开发方式有很多相似之处,但我个人认为,查询似乎与代码具有不同的结构,并且由于方法不同,很难同时掌握两者。


2
您所说的“结构”是什么意思?如果您正在谈论语义,那么对于“ 专家 ”而言,掌握任何一种新的语义都不是问题。根据定义。OTOH,只有少数开发人员可以使用数据库和查询语言,而我们其他人根本不在乎。
SK-logic

3
我认为这是一个错误的假设:“那里有很多程序员,他们也是查询编写和数据库设计方面的专家。” 相对而言,很少有程序员具备以下方面的知识:DBA!= SE。
阿什莉

1
编写数据库查询真的有多难?
明智船长

@CaptainShakespeare,一旦您完成了CRUD操作,确实会变得非常困难。有时会做复杂的报告。然后查看性能调整查询。
HLGEM 2013年

Answers:


69

数据库查询编写是否应该成为核心要求取决于工作,但是关系数据库在当前技术中无处不在。

因此,如果遇到一位不知道如何编写数据库查询的程序员,那么我会期望以下两件事之一:

  1. 他们通常没有经验。
  2. 他们在另一个领域(例如嵌入式系统)高度专业化,从不需要学习它。

数据库查询从根本上与更多标准编程语言不同。它们是代数的,并且打算在关系数据上运行,而C#或Java是必不可少的,并且在磁盘,内存,用户输入等上运行。即使是形式更代数的LISP或Haskell之类的功能语言也很少面向关系数据。

编辑:正如我和其他人在评论中所指出的那样,有经验的开发人员可能不太了解数据库查询有一些正当的理由:

  • 他们的团队使用ORM / NoSQL
  • 他们的团队有数据库程序员
  • 应用程序的复杂性在于业务逻辑,而数据库查询则微不足道
  • 他们的团队分摊了工作,以便一些程序员不编写查询

这些警告虽然有效,但不能说服经验丰富的开发人员不知道数据库查询的原因。除非高度专业,否则程序员应该熟悉关系数据库。

总而言之,大多数经验丰富的开发人员都应该了解数据库查询


1
因此,如果有人做了一个使用数据库的琐碎项目,那么他应该熟悉查询,对吗?
Shamim Hafiz

3
@Shamim,我希望这个人对查询有一定的经验,除非这个人是初级或入门级的。也许这个人只有几年的经验,并且被一个高度专业化的团队所庇护?
maple_shaft

12
@Shamim我可能希望如此。他们仍然可能是一个好的程序员。这样的问题很难回答,因为它们有很多警告:也许团队有一名DB程序员;也许应用程序的非平凡性在于业务逻辑中,而数据库查询却微不足道;也许他们分摊了工作,使您的程序员无法处理查询;等
Matthew Rodatus 2011年

4
我的开发团队有专职的PL / SQL程序员作为项目的一部分。因此,尽管.Net程序员可以执行简单的查询,但他们在那里可以对其进行审核并开发更复杂的查询。此外,随着ORM(和NOSQL)的泛滥,为什么您认为非SQL开发人员必须知道复杂的查询。
softveda 2011年

2
@Matthew Rodatus:我曾在具有管理查询的库的地方工作,因此理论上可以在不了解简单SQL的情况下在那里工作。我相信所有开发人员都可以在实践中胜任。
David Thornley

23

任何软件工程师都应该对数据库以及如何使用SQL进行数据库有基本的了解,至少要达到他们了解该数据库可用于什么目的的水平(并且我还将包括对键,视图的理解)。 ,存储过程和触发器)。

并非每个软件工程师都需要成为专家,并且所需的专业知识水平实际上取决于他们关注的软件类型。嵌入式软件,硬件驱动程序和操作系统很少使用SQL,但是应用程序软件(基于Web或桌面或基于服务/守护程序)始终使用数据库。


1
幸运的是,如今完全可以在没有任何RDBMS的情况下进行应用程序。大多数任务不需要它们,或者根本无法将它们充分映射到关系模型。有大量的非关系存储选项可用。
SK-logic

8
这也总结了我的观点。专家?不,知识?是。
韦恩·莫利纳

2
@ SK-logic,您认为哪种类型的关系数据库无关紧要?数据仓库过于专业化,无法在交易系统中进行分析。而且不要让我开始了解OODBMS的所有错误。
maple_shaft

1
@maple_shaft,有许多专门的,面向领域的存储解决方案。RDBMSes试图变得通用,并且在此方面严重失败。在某些情况下,即使是古老的层级DBMS也比关系型要好得多。
SK-logic

6
并非所有桌面软件都使用数据库,因此当您说它一直在发生时,请当心。
亚当李尔

18

在某些专业领域(例如嵌入式系统)中,不需要数据库知识。但是大多数业务应用程序都使用某种类型的数据库,如果您不完全了解如何正确使用它,则可能会造成性能问题,而这些问题很难修复。重构数据库可能是一个复杂而困难的过程,许多地方都因为这种困难而选择不修复结构性问题,而只是将自己挖得更深。如果您具有数据库知识,那么设计会变得容易得多,并且随着时间的流逝工作的可能性会更大。

ORM不能代替获取数据库知识。任何不了解数据库查询和设计基础知识的人都注定要拥有性能低下,设计不良的数据库,这将影响应用程序处理负载的远程能力。知道自己在做什么的人手中的ORM很好;在那些不愿学习数据库的人的手中,它们通常是一场灾难。

如果我有一个带有数据库后端的项目,那么数据库专家将是我雇用的第二个开发人员(仅次于初始应用程序开发人员)。通常,数据库并不是一成不变的,数据将在20年后以几乎相同的形式存在于数据库中,因此在开始阶段就具有专业知识是值得的。

项目经常会遇到麻烦,因为在数据库拥有1亿条记录并且运行缓慢之前,他们不会雇用这些人。否则他们会指责该工具的性能不佳(如果设计正确,SQL Server的运行速度不会慢)。


4
+1表示存在ORM并不能代替对SQL的了解(或您所使用的任何类型的数据库中的基本因素)。
RHSeeger 2011年

4
+1,希望我能再给您100!我知道corellation!=因果关系,但对我来说,显而易见的是,与我合作过的最有效的应用程序开发人员对如何编写标准的SELECT查询有透彻的了解。我应该能够向一个好的开发人员提供一个数据模型和一个关于数据的“问题”,并且那个人最终应该能够写出一个“回答”我的问题的查询。
maple_shaft

1
+1,完全同意。我不解释“我们使用ORM”或“为此我们有专门的程序员”的解释。如果有人真的有经验,他们将在一时间担当数据库开发人员的角色。那就是经验。
GrandmasterB

15

政治上正确的答案:这取决于。如果开发人员从不使用关系数据库,那么SQL知识就毫无价值(在当今NoSQL应用程序的时代,这实际上很有可能)。

其次,如果有DBA或专职查询编写器(无论标题如何),那么理解也就没有那么重要了。

只有开发人员需要千篇一律,并且在他的项目中有使用关系数据库的要求(例如,在老式的Web应用程序中或与现有数据库连接)时,这才非常重要。

我的个人看法:否。有经验的软件开发人员应能在必要时学习新技能(例如SQL),而不是“默认”。恕我直言,灵活性和学习与理解的能力使优秀的开发人员与优秀的开发人员区分开。“金锤子”规则也适用-如果您有一个具有丰富的SQL知识的开发人员,则该开发人员很可能会拉出他最了解的工具-关系数据库-尝试解决每个问题,而不一定有成为最佳解决方案。当然,这也适用于NoSQL倡导者;)。

有经验的程序员应该知道为正确的工作选择正确的工具。


NoSQL数据库处理的数据不会比关系数据库更多或更快。我不知道你在哪里听到的,但这是公然,危险的错误。
2011年

@Aaronaught-编辑,感谢我过早的假设的提示:)。
克苏鲁

7

查看以下有关计算机编程的维基百科介绍:

计算机编程(通常简称为编程或编码)是设计,编写,测试,调试/故障排除以及维护计算机程序源代码的过程。此源代码是用编程语言编写的。编程的目的是创建表现出某些所需行为的程序。

数据库查询具有自己的语言,可以设计,测试,调试和维护它们。数据库查询的目的是允许您以所需的方式获取所需的信息。

因此,我认为它肯定是在编程。


7

一位具有企业和业务应用程序背景的优秀软件工程师(编辑:特别是在使用RDBMS的项目中)应该具有以标准格式编写关系数据库查询的专业知识。此外,他们应该能够理解复杂的模式并提出至少中等复杂度的模式设计。

数据建模人员或功能架构师应从事极其高级或复杂的方案设计。

这并不意味着数据库程序员也没有位置。如果可能,最好将复杂的存储过程,复杂而高效的查询以及针对单个数据库供应商(例如Oracle,MySQL,SQLServer等)的独特工具和产品的数据库层软件设计和体系结构最好地留给专业软件具有这些高度专业化和复杂的报价的经验的工程师。

但是,我认为绝大多数业务和企业系统都不能证明需要数据建模人员和专门的数据库程序员,但是在从事此类项目之前,我曾从这些人带给桌面的知识和专业知识中受益匪浅。


2
-1:强烈不同意“好的”软件工程师应该是关系数据库查询的专家
约翰·桑德斯

3
如果我说一个好的企业或业务应用程序软件工程师(而不是嵌入式系统等),并且我说这个人应该是标准关系数据库查询的专家(没有花哨的裤子供应商),您仍然会不同意吗?诸如分析查询之类的细节)?带有我上面指定的标签的任何软件工程师都应该对SQL SELECT语句,所有类型的联接,联合,相交和合并,内联视图,条件,排序和分组结果集有透彻的了解并得到充分证明。
maple_shaft

4
嗯 我在一家大型软件公司工作,我们不处理任何RDBMS。我开发台式机软件的上一份工作也不需要任何SQL。我不确定您如何定义企业和业务应用程序,但是在我看来,您对事物的看法有点狭窄。
亚当李尔

2
我坚持我所说的。从理论上讲,如果应用程序很好地进行了分层和组件化,那么就我的整个专业经验而言,我的团队是没有必要的,如果我们不是SQL方面的专家,即使我们有专门的RDBMS设计和开发团队,我也会很沮丧。也许我是个过时的人,或者我的职业生涯很不幸?
maple_shaft

3
@maple_shaft是的,不是我所研究的应用程序已经足够地组件化。那是因为他们没有使用任何RDBMS。我猜是不同的领域。关键是,您不能说每个业务/企业开发人员都必须精通SQL。这根本不是真的。如果您擅长使用它。像其他任何语言或技术一样,在您需要之前不要过多担心。
亚当李尔

6

其他人已经回答了您有关数据库查询的问题。

数据库设计是一种特殊的设计类型。学习起来并不难,但是典型的数据库设计人员并没有太多设计数据库的机会。

我现在工作的地方具有与1970年相同的数据库设计。我们已经将数据库从IDMS移到了DB2,但是它是相同的网络数据库设计。在这里工作的9年中,我有机会创建5个新的DB2表。

我怀疑专门的数据库设计人员很少有工作场所。因此,我得出的结论是,数据库设计被视为高级分析师的全部工作。


5

坦率地说,我们当中很多人认为每个开发都围绕数据库和SQL数据库展开,这让我感到非常惊讶。

其他人提到了许多方法可以避免工作中SQL的棘手问题,即使我们(间接)使用数据库也是如此,但是所有为101种电气产品编写固件的开发人员呢?具有?那么专门从事实时监控的家伙呢?

我建议当今的大多数开发人员都将在不同程度上拥有SQL技能,但这远不是他们能力的晴雨表。


5

我认为您高估了数据库在软件中的重要性。

许多类的应用程序不是以数据库为中心的。

现在是否需要在文字处理器和图像编辑器中使用DBMS?语音识别和计算机视觉系统如何包含大量数据库查询呢?

线性视频编辑器和视频游戏物理引擎又如何呢?


5

我希望通才的开发人员至少对数据库技术(关系性或其他)有所了解,并能够讨论使用它们的利弊。否则,我担心他们所知道的所有方法是将数据填充到平面文件中。


4

我认为查询编写不应成为程序员的核心要求。话虽如此,我相信能够编写查询和设计数据库的程序员对组织来说将更有价值。

但是,如果该程序员只能编写“ select * from tblxxxx”类型查询,则我不会认为该程序员是专家。同样,如果由该程序员设计的数据库将一对多关系放入一个表而不是两个表中,那么我不会认为该程序员是专家。

这是我向非IT人员解释的方法。IT专业人员专门研究某些领域,类似于木匠,电工和水管工专门研究那里受人尊敬的领域。他们倾向于重叠某些技能,但不是所有领域的专家。电工可以满怀信心地完成简单的木工任务,但尝试应对复杂的结构却并非好兆头。

同样,程序员可以并且应该知道如何编写或操作简单的查询和数据库设计,但不应期望设计复杂的数据结构。


3

环顾我们的部门,这取决于:

  • 我们的桌面/网络/服务器开发人员。至少需要根据其专业知识编写基本的到高级的Crud语句。为了优化,我们有一些专门的数据库管理员。
  • 我们的嵌入式程序员。不少人从未超越“从mytable中选择*”。但是,随着最近几个月在项目中引入sqllite,情况也发生了变化。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.