开发人员应在多大程度上了解有关数据库系统的详细信息?
当今的现代数据库系统具有许多功能。我们会同意我的观点,要学习一个数据库,我们必须不学习在另一个数据库中学习的概念。例如,每个数据库将实现与其他数据库不同的锁定。因此,将一个数据库的概念带到另一个数据库将是失败的秘诀。可能还有其他一些例子,其中两个数据库的执行情况大不相同。
因此,在开发数据库驱动的系统时,程序员是否应该详细了解数据库,以便为性能编写代码?我认为DBA稍后要求提高性能是不合适的,因为他的工作是仅维护数据库并在紧急情况下为开发人员提供帮助,而不是定期进行。
我们认为开发人员需要对数据库进行深入了解的程度是什么?
解决方案
回答
我认为开发人员应该对他们的数据库系统如何工作有一个很好的了解,而不管它是哪个系统。在制定设计和体系结构决策时,他们需要了解数据库的潜在含义。
回答
就个人而言,我认为我们应该知道数据库如何工作以及关系模型以及其背后的花言巧语,包括所有形式的规范化(尽管我很少看到需要超越第三种规范形式)。关系模型的核心概念可能不会从关系数据库更改为关系数据库实现,但是那又如何呢?
如果开发人员从事非常规项目,则不了解数据库规范化,索引等基本原理的开发人员将会遭受苦难。
回答
我认为这真的取决于工作。如果我们是一家拥有专用DBA的大型公司的开发人员,那么我们可能不需要了解很多,但是,如果我们在小型公司中,那么对数据库的更多了解可能会很有帮助。在小型公司中,我们可能会戴上一顶帽子。
在任何情况下了解更多信息都不会伤害我们。
回答
如果不确定如何最好地访问数据库,则应使用经过实践检验的解决方案,例如Microsoft http://msdn.microsoft.com/zh-cn/library/cc309504.aspx的应用程序块。通过检查代码的实现方式,它们也可以对我们有所帮助。
回答
我认为这些是最重要的事情(从最重要到最不重要的是IMO):
- SQL(很明显)-有助于了解至少如何进行基本查询,聚合(sum()等)和内部联接
- 规范化-数据库设计技能是主要要求
- 锁定模型/ MVCC-很高兴至少对数据库如何管理行锁定有基本的了解(或者使用MVCC通过乐观锁定来实现类似的目标)
- Txns,符合ACID规范-请了解这些工作原理和交互方式
- 索引编制-虽然我认为我们不需要成为表空间方面的专家,而是将数据放置在单独的驱动器上以实现最佳性能以及其他细节,但它确实有助于对索引扫描与表扫描的工作原理有较高的了解。它还有助于读取查询计划并了解为什么可能要选择一个查询计划。
- 基本工具-我们可能会发现自己想将生产数据复制到测试环境中,因此了解如何还原/备份数据库的基础将很重要。
幸运的是,今天有一些很棒的FOSS和免费的商业数据库,可以用来学习很多关于db基础知识。
回答
熟悉关系数据库理论,对标准SQL语法有很好的运用知识,并且知道什么是存储过程,触发器,视图和索引,这肯定是无害的。显然,在开始使用该数据库之前,学习特定于SQL的数据库扩展(T-SQL,PL / SQL等)并不是非常重要。
我认为在开发数据库应用程序时,对数据库的基本了解很重要,就像对软件所运行的硬件的了解一样重要。我们不必是专家,但是我们不应该完全不了解与软件交互的任何事物。
就是说,作为应用程序开发人员,我们可能不需要做太多的SQL工作。与数据库的大多数交互都应通过DBA开发的存储过程来完成,我不太喜欢在应用程序代码中包含SQL代码。如果查询是在存储过程中,则DBA可以更改存储过程的实现,甚至可以更改数据库模式,并且只要结果相同,就不需要更改应用程序代码。