不管我们喜欢与否,我们开发人员中的许多人(如果不是大多数的话)都经常使用数据库,或者有一天可能不得不使用数据库。考虑到大量的误用和滥用,以及每天出现的大量与数据库相关的问题,公平地说,有一些概念是开发人员应该知道的——即使他们今天不设计或使用数据库。
关于数据库,开发人员和其他软件专业人员应该知道的一个重要概念是什么?
不管我们喜欢与否,我们开发人员中的许多人(如果不是大多数的话)都经常使用数据库,或者有一天可能不得不使用数据库。考虑到大量的误用和滥用,以及每天出现的大量与数据库相关的问题,公平地说,有一些概念是开发人员应该知道的——即使他们今天不设计或使用数据库。
关于数据库,开发人员和其他软件专业人员应该知道的一个重要概念是什么?
当前回答
索引的工作原理
这可能不是最重要的,但肯定是最被低估的话题。
索引的问题在于SQL教程通常根本不会提到它们,而且所有的玩具示例都可以在没有索引的情况下工作。
即使更有经验的开发人员也可以编写相当好的(和复杂的)SQL,而不需要了解更多关于索引的知识,而只是“索引使查询更快”。
这是因为SQL数据库作为黑盒的工作做得非常好:
告诉我你需要什么(给我SQL),我来处理。
这可以很好地检索正确的结果。SQL的作者不需要知道系统在幕后做什么——直到一切变得非常缓慢.....
这时索引就成了一个话题。但这通常很晚了,而且某些人(一些公司?)已经遇到了真正的问题。
这就是为什么我认为索引是在使用数据库时不能忘记的首要主题。不幸的是,它很容易忘记。
免责声明
这些论点是从我的免费电子书“使用索引,卢克”的序言中借来的。我花了很多时间来解释索引是如何工作的,以及如何正确地使用它们。
其他回答
关于以下对Walter M。的回答:
“写得很好!历史视角对于当时没有做数据库工作的人(比如我)来说非常有用。”
历史观点在某种意义上是绝对重要的。“忘记历史的人,注定要重蹈覆辙。”XML重复着过去的层次错误,图形数据库重复着过去的网络错误,OO系统迫使用户使用层次模型,而每个人即使只有十分之一的大脑都应该知道层次模型不适合真实世界的通用表示,等等,等等。
至于问题本身:
每个数据库开发人员都应该知道“关系型”不等于“SQL”。然后他们就会明白为什么他们会被DBMS供应商如此失望,为什么他们应该告诉同样的供应商想出更好的东西(例如真正的关系型DBMS),如果他们想继续从他们的客户那里为这些蹩脚的软件吸走大量的钱)。
每个数据库开发人员都应该了解关系代数的所有知识。这样,就不会再有开发者在Stack Overflow网站上发布“我不知道如何做我的工作,希望别人帮我做”这样的愚蠢问题了。
了解用于数据库编程的工具!!
我浪费了很多时间试图理解为什么我的代码神秘地失败了。
例如,如果您正在使用。net,您需要知道如何正确使用System.Data.SqlClient名称空间中的对象。您需要知道如何管理SqlConnection对象,以确保它们被打开、关闭,并在必要时正确地处理。
你需要知道,当你使用SqlDataReader时,有必要将它与你的SqlConnection分开关闭。您需要了解如何在适当的时候保持连接打开,以及如何最小化对数据库的访问次数(因为它们在计算时间方面相对昂贵)。
我只是想指出一个观察结果——似乎大多数的回答都假设数据库与关系数据库是可以互换的。还有对象数据库,平面文件数据库。评估当前软件项目的需求是很重要的。从程序员的角度来看,数据库决策可以推迟到以后。另一方面,数据建模可以在早期实现,并带来很大的成功。
我认为数据建模是一个关键组件,是一个相对较老的概念,但它已经被软件行业中的许多人遗忘了。数据建模,尤其是概念建模,可以揭示系统的功能行为,并可作为开发的路线图。
另一方面,所需的数据库类型可以根据许多不同的因素来确定,包括环境、用户数量和可用的本地硬件(如硬盘空间)。
非唯一索引中的列顺序很重要。
第一列应该是其内容(即基数)变化最大的列。
这是为了帮助SQL Server在运行时如何使用索引创建有用的统计数据。
避免SQL注入以及如何保护您的数据库