不管我们喜欢与否,我们开发人员中的许多人(如果不是大多数的话)都经常使用数据库,或者有一天可能不得不使用数据库。考虑到大量的误用和滥用,以及每天出现的大量与数据库相关的问题,公平地说,有一些概念是开发人员应该知道的——即使他们今天不设计或使用数据库。

关于数据库,开发人员和其他软件专业人员应该知道的一个重要概念是什么?


当前回答

简单的尊重。

它不仅仅是一个存储库 您可能并不比供应商或dba更了解情况 你不会在凌晨3点的时候,在高级经理对你大喊大叫的情况下支持它

其他回答

我希望每个人,包括dba和开发人员/设计人员/架构师,都能更好地理解如何正确地对业务领域建模,以及如何将业务领域模型映射/转换为规范化的数据库逻辑模型、优化的物理模型和适当的面向对象类模型(每种模型由于各种原因(可能)不同),并理解何时、为什么以及它们(或应该)如何彼此不同。

RDBMS兼容性

查看是否需要在多个RDBMS中运行应用程序。如有,可能需要:

避免RDBMS SQL扩展 消除触发器和存储过程 遵循严格的SQL标准 转换字段数据类型 更改事务隔离级别

否则,这些问题应该分开处理,并开发应用程序的不同版本(或配置)。

简单的尊重。

它不仅仅是一个存储库 您可能并不比供应商或dba更了解情况 你不会在凌晨3点的时候,在高级经理对你大喊大叫的情况下支持它

基本的索引

当看到一个表或整个数据库没有索引,或者索引是任意的/无用的时,我总是感到震惊。即使你不是在设计数据库,只是需要编写一些查询,至少理解以下内容仍然是至关重要的:

数据库中索引了什么,没有索引什么: 扫描类型之间的差异,它们是如何选择的,以及您编写查询的方式如何影响这种选择; 覆盖率的概念(为什么你不应该只写SELECT *); 聚类索引和非聚类索引之间的区别; 为什么更多/更大的指数不一定更好; 为什么应该尽量避免在函数中包装筛选器列。

设计人员还应该注意常见的索引反模式,例如:

Access反模式(逐个索引每一列) Catch-All反模式(在所有或大多数列上建立一个大型索引,显然是在错误的印象中创建的,认为它会加速涉及这些列的所有可以想象的查询)。

数据库索引的质量——以及您在编写查询时是否利用了它——是迄今为止最重要的性能部分。在SO和其他论坛上发布的抱怨性能不佳的问题中,10个问题中有9个总是被证明是由于索引不好或表达式不sargable。

阻抗失配问题,并了解常见缺陷或orm。