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

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


当前回答

非唯一索引中的列顺序很重要。

第一列应该是其内容(即基数)变化最大的列。

这是为了帮助SQL Server在运行时如何使用索引创建有用的统计数据。

其他回答

非常好的问题。让我们看看,首先,没有完全理解连接的人不应该考虑查询数据库。这就像开车时不知道方向盘和刹车在哪里一样。您还需要了解数据类型以及如何选择最佳数据类型。

开发人员应该了解的另一件事是,在设计数据库时,你应该记住三件事:

Data integrity - if the data can't be relied on you essentially have no data - this means do not put required logic in the application as many other sources may touch the database. Constraints, foreign keys and sometimes triggers are necessary to data integrity. Don't fail to use them because you don't like them or don't want to be bothered to understand them. Performance - it is very hard to refactor a poorly performing database and performance should be considered from the start. There are many ways to do the same query and some are known to be faster almost always, it is short-sighted not to learn and use these ways. Read some books on performance tuning before designing queries or database structures. Security - this data is the life-blood of your company, it also frequently contains personal information that can be stolen. Learn to protect your data from SQL injection attacks and fraud and identity theft.

在查询数据库时,很容易得到错误的答案。确保完全理解数据模型。请记住,实际决策通常是基于查询返回的数据做出的。当它是错误的,就会做出错误的商业决策。你可能会因为糟糕的询问而杀死一家公司,或者失去一个大客户。数据是有意义的,但开发者往往忘记了这一点。

数据几乎永远不会消失,考虑的是随着时间的推移存储数据,而不是今天如何获取数据。数据库在拥有10万条记录时运行良好,十年后可能就不那么好了。应用程序很少能像数据一样持久。这就是为什么性能设计如此重要的原因之一。

您的数据库可能需要应用程序不需要看到的字段。比如用于复制的guid,插入的日期字段。等。您还可能需要存储更改的历史,以及谁在什么时候做了更改,并能够从这个存储库中恢复坏的更改。在向网站询问如何修复忘记在更新中添加where子句并更新整个表的问题之前,请考虑一下您打算如何做到这一点。

永远不要在比生产版本更新的数据库版本中进行开发。永远、永远、永远不要直接针对生产数据库进行开发。

如果没有数据库管理员,请确保有人正在进行备份,并且知道如何恢复备份,并且已经测试过如何恢复备份。

数据库代码就是代码,没有理由不把它像其他代码一样放在源代码控制中。

对于一些项目,面向对象模型更好。

对于其他项目,关系模型更好。

三件事是一个神奇的数字:

数据库也需要版本控制。 游标很慢,您可能不需要它们。 触发器是邪恶的*

*几乎总是

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

我想这里已经介绍了很多技术细节,我不想再补充了。我想说的一件事是,社交比技术更重要,作为应用程序开发人员,不要陷入“DBA知道最好的”的陷阱。

如果您在查询方面有性能问题,也要解决这个问题。自己进行研究,并要求dba解释发生了什么,以及他们的解决方案是如何解决问题的。

在你做了研究之后,也要提出你自己的建议。也就是说,我试图找到解决问题的合作解决方案,而不是将数据库问题留给dba。