开发人员应该在多大程度上了解有关数据库系统的细节?

时间:2008-08-23 05:06:44

标签: database

现代数据库系统具有大量功能。你同意我的意见,要学习一个数据库,你必须忘记在另一个数据库中学到的概念。例如,每个数据库都会实现与其他数据库不同的锁定。因此,将一个数据库的概念带到另一个数据库将是一个失败的方法。还有其他一些例子,两个数据库的表现非常不同。

因此,在开发数据库驱动的系统时,程序员是否需要详细了解数据库,以便他们对性能进行编码?我认为让DBA稍后要求性能是不合适的,因为他的工作是只维护数据库并在紧急情况下帮助开发人员,但不是定期。

您认为开发人员需要深入了解数据库的程度如何?

7 个答案:

答案 0 :(得分:6)

我认为这些是最重要的事情(从最重要到最不重要的IMO):

  • SQL(显然) - 了解如何至少执行基本查询,聚合(sum()等)和内部联接
  • 规范化 - 数据库设计技能是一项主要要求
  • 锁定模型/ MVCC - 很高兴至少掌握数据库如何管理行锁定(或使用MVCC通过乐观锁定实现类似目标)
  • ACID合规性,Txns - 请知道这些工作原理和互动方式
  • 索引 - 虽然我认为您不需要成为表空间专家,将数据放在单独的驱动器上以获得最佳性能,以及其他细节,但它确实有助于获得高水平的知识索引扫描如何工作与表扫描。它还有助于能够阅读查询计划并理解为什么它可能选择一个而不是另一个。
  • 基本工具 - 您可能会发现自己希望在某些时候将生产数据复制到测试环境,因此了解如何恢复/备份数据库的基础知识非常重要。

幸运的是,今天有一些很棒的FOSS和免费商业数据库可以用来学习db基础知识。

答案 1 :(得分:3)

我认为开发人员应该很好地掌握他们的数据库系统是如何工作的,而不管它是哪一个。在做出设计和架构决策时,他们需要了解数据库的可能含义。

答案 2 :(得分:3)

就我个人而言,我认为你应该知道数据库是如何工作的,以及关系模型及其背后的修辞,包括所有形式的规范化(尽管我很少看到需要超越第三范式)。关系模型的核心概念不会从关系数据库变为关系数据库 - 实现可能会,但那又如何呢?

如果开发人员不了解数据库规范化,索引等背后的基本原理,那么如果他们从事非平凡的项目,他们将会受到影响。

答案 3 :(得分:3)

我认为这取决于你的工作。如果您是拥有专门DBA的大公司的开发人员,那么您可能不需要了解太多,但如果您在一家小公司,那么了解有关数据库的更多信息可能会非常有用。在小公司,你可以戴一顶以上的帽子。

在任何情况下都能了解更多信息。

答案 4 :(得分:3)

熟悉关系数据库理论,熟练掌握标准SQL语法,知道存储过程,触发器,视图和索引是什么,这当然不会有什么害处。显然,在开始使用该数据库之前,学习SQL的特定于数据库的扩展(T-SQL,PL / SQL等)并不是非常重要。

我认为在开发数据库应用程序时对数据库的基本理解非常重要,就像了解软件运行的硬件一样重要。您不必是专家,但您不应该完全不知道软件与之交互的任何内容。

也就是说,作为应用程序开发人员,您可能不需要做很多SQL。大多数与数据库的交互应该通过DBA开发的存储过程完成,我不是在应用程序代码中包含SQL代码的忠实粉丝。如果您的查询在存储过程中,那么DBA可以更改存储过程的实现,甚至是数据库模式,只要结果相同,就不需要对应用程序代码进行任何更改。

答案 5 :(得分:2)

如果您不确定如何最好地访问数据库,您应该使用经过试验和测试的解决方案,例如Microsoft的应用程序块 - http://msdn.microsoft.com/en-us/library/cc309504.aspx。通过检查代码的实现方式,它们也可以证明对您有所帮助。

答案 6 :(得分:0)

关于Sql查询的基本知识是必须的。那么你可以开发简单的系统。但是当你要实现复杂系统时,你应该知道规范化,程序,功能等。