不管我们喜欢与否,我们开发人员中的许多人(如果不是大多数的话)都经常使用数据库,或者有一天可能不得不使用数据库。考虑到大量的误用和滥用,以及每天出现的大量与数据库相关的问题,公平地说,有一些概念是开发人员应该知道的——即使他们今天不设计或使用数据库。
关于数据库,开发人员和其他软件专业人员应该知道的一个重要概念是什么?
不管我们喜欢与否,我们开发人员中的许多人(如果不是大多数的话)都经常使用数据库,或者有一天可能不得不使用数据库。考虑到大量的误用和滥用,以及每天出现的大量与数据库相关的问题,公平地说,有一些概念是开发人员应该知道的——即使他们今天不设计或使用数据库。
关于数据库,开发人员和其他软件专业人员应该知道的一个重要概念是什么?
当前回答
了解用于数据库编程的工具!!
我浪费了很多时间试图理解为什么我的代码神秘地失败了。
例如,如果您正在使用。net,您需要知道如何正确使用System.Data.SqlClient名称空间中的对象。您需要知道如何管理SqlConnection对象,以确保它们被打开、关闭,并在必要时正确地处理。
你需要知道,当你使用SqlDataReader时,有必要将它与你的SqlConnection分开关闭。您需要了解如何在适当的时候保持连接打开,以及如何最小化对数据库的访问次数(因为它们在计算时间方面相对昂贵)。
其他回答
了解用于数据库编程的工具!!
我浪费了很多时间试图理解为什么我的代码神秘地失败了。
例如,如果您正在使用。net,您需要知道如何正确使用System.Data.SqlClient名称空间中的对象。您需要知道如何管理SqlConnection对象,以确保它们被打开、关闭,并在必要时正确地处理。
你需要知道,当你使用SqlDataReader时,有必要将它与你的SqlConnection分开关闭。您需要了解如何在适当的时候保持连接打开,以及如何最小化对数据库的访问次数(因为它们在计算时间方面相对昂贵)。
将非正规化视为一个可能的天使,而不是魔鬼,并将NoSQL数据库视为关系数据库的替代方案。
此外,我认为实体-关系模型是每个开发人员必须知道的,即使你不设计数据库。它将让您彻底理解数据库的所有内容。
进化数据库设计。http://martinfowler.com/articles/evodb.html
这些敏捷方法使数据库更改过程易于管理、可预测和可测试。
开发人员应该知道,在版本控制、持续集成和自动化测试方面重构生产数据库需要什么。
进化数据库设计过程具有管理方面的问题,例如,在此代码库的所有数据库中,某个列在某个生命周期后将被删除。
至少要知道数据库重构的概念和方法是存在的。 http://www.agiledata.org/essays/databaseRefactoringCatalog.html
分类和过程描述也使得为这些重构实现工具成为可能。
避免SQL注入以及如何保护您的数据库
首先,开发人员需要了解一些关于数据库的知识。它们不仅仅是输入SQL并得到结果集的神奇设备,而是具有自己的逻辑和癖好的非常复杂的软件。
其次,针对不同的目的有不同的数据库设置。如果有可用的数据仓库,则不希望开发人员从联机事务数据库生成历史报告。
第三,开发人员需要了解基本的SQL,包括连接。
除此之外,它还取决于开发人员参与的程度。我曾经工作过,我是开发人员,实际上是DBA, DBA只是在走道的另一边,而DBA则在各自的领域。(我不喜欢第三个。)假设开发人员参与了数据库设计:
他们需要了解基本的标准化,至少是前三种标准形式。除此之外,请找一个DBA。对于那些有过美国法庭(以及随便看的电视节目)经验的人来说,有一句便于记忆的话:“依靠钥匙,全部的钥匙,除了钥匙别无其他,帮你一把,科德。”
他们需要了解索引,我的意思是他们应该知道他们需要什么索引,以及它们可能如何影响性能。这意味着不要使用无用的索引,但不要害怕添加它们来辅助查询。任何进一步的工作(如余额)都应该留给DBA。
他们需要理解对数据完整性的需求,并能够指出他们在哪里验证数据,以及如果发现问题他们正在做什么。这并不一定要在数据库中(在数据库中很难向用户发出有意义的错误消息),但必须在某个地方。
他们应该具备如何制定计划的基本知识,以及如何大体阅读计划(至少足以判断算法是否有效)。
他们应该模糊地知道什么是触发器,什么是视图,以及可以对数据库进行分区。他们不需要任何细节,但他们需要知道如何向DBA询问这些事情。
他们当然应该知道不要干涉生产数据,或生产代码,或类似的东西,他们应该知道所有的源代码都进入VCS。
毫无疑问,我忘记了一些事情,但是一般的开发人员不需要是DBA,前提是手头有一个真正的DBA。