3

当今的现代数据库系统具有大量功能。你会同意我的观点,要学习一个数据库,你必须忘记你在另一个数据库中学到的概念。例如,每个数据库将实现与其他数据库不同的锁定。因此,将一个数据库的概念带到另一个数据库将是失败的秘诀。可能还有其他示例,其中两个数据库的性能会非常不同。

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

您认为开发人员需要深入了解数据库的程度应该是多少?

4

7 回答 7

6

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

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

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

于 2008-08-23T05:20:50.590 回答
3

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

于 2008-08-23T05:09:56.873 回答
3

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

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

于 2008-08-23T05:12:59.330 回答
3

我认为这真的取决于你的工作。如果您是一家拥有专门 DBA 的大公司的开发人员,那么您可能不需要了解太多,但如果您在一家小公司,那么了解更多关于数据库的知识可能真的很有帮助。在小型公司中,您可能会戴不止一顶帽子。

在任何情况下了解更多信息都不会有什么坏处。

于 2008-08-23T05:16:40.257 回答
3

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

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

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

于 2008-08-23T05:30:00.177 回答
2

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

于 2008-08-23T05:18:17.633 回答
0

关于 Sql 查询的基本知识是必须的。然后你可以开发简单的系统。但是当您要实现复杂系统时,您应该了解规范化、过程、函数等。

于 2013-05-08T07:13:34.393 回答