每个开发人员应该知道哪些数据库?

无论我们喜欢与否,如果不是我们大多数开发人员,我们中的许多人或者经常与数据库一起工作,或者有一天可能需要与其中一个人一起工作。 考虑到野外滥用和滥用的数量以及每天出现的数据库相关问题的数量,公平地说,开发人员应该知道某些概念 - 即使他们不设计或使用数据库今天。 所以:



开发人员和其他软件专业人员应该了解数据库的重要概念是什么?


回应指南:


保持你的清单简短。
每个答案的一个概念是最好的。

具体
“数据建模”可能是一项重要的技能,但究竟意味着什么呢?

解释你的理由。
为什么你的概念很重要? 不要只说“使用索引”。 不要陷入“最佳实践”。 说服你的听众去了解更多。

Upvote回答您的同意。
先阅读其他人的答案。 一个排名靠前的答案比两个排名较低的答案更有效。 如果您有更多要添加的内容,请添加评论或引用原件。

不要因为它不适用于你个人而降低某些东西。
我们都在不同的领域工作。 这里的目标是为数据库新手提供方向,以获得对数据库设计和数据库驱动开发的充分理解和全面理解,而不是争夺最重要的头衔。


开发人员应该首先了解数据库的第一件事是: 数据库用于什么? 不是它们是如何工作的,也不是如何构建它,甚至也不是如何编写代码来检索或更新数据库中的数据。 但是他们的目的是什么?

不幸的是,这个答案是一个移动的目标。 在数据库的嘿嘿,从20世纪70年代到90年代初,数据库是用于共享数据的。 如果您使用的是数据库,并且您没有共享数据,那么您不是参与了学术项目,就是在浪费资源,包括自己在内。 建立一个数据库和驯服数据库管理系统是非常重要的任务,就数据被多次利用而言,投资回报必须巨大才能与投资相匹配。

在过去的15年中,数据库已经被用于存储与一个应用程序相关的持久数据。 为MySQL,Access或SQL Server构建数据库变得如此常规,数据库几乎成为普通应用程序的常规部分。 有时,随着数据的实际价值变得明显,任务最初的有限任务会被任务蠕变向上推动。 不幸的是,设计时考虑到单一目的的数据库在开始被推入企业范围和关键任务的角色时往往会出现很大的失败。

开发人员需要了解数据库的第二件事是整个以数据为中心的世界观。 与以流程为中心的世界观相比,以数据为中心的世界观与大多数开发人员所学的任何东西都截然不同。 与这种差距相比,结构化编程与面向对象编程之间的差距相对较小。

至少在概述中,开发人员需要学习的第三件事是数据建模,包括概念数据建模,逻辑数据建模和物理数据建模。

从数据为中心的角度来看, 概念数据建模实际上是需求分析。

逻辑数据建模通常是将特定数据模型应用于概念数据建模中发现的需求。 关系模型的使用远远超过其他任何特定的模型,开发人员需要学习关系模型。 为非平凡需求设计一个功能强大且相关的关系模型并不是一项简单的任务。 如果您误解了关系模型,则无法构建好的SQL表。

物理数据建模通常是DBMS特有的,不需要进行更详细的学习,除非开发人员也是数据库构建师或DBA。 开发人员需要了解的是物理数据库设计与逻辑数据库设计的分离程度,以及通过调整物理设计来实现生成高速数据库的程度。

开发人员需要学习的下一件事是, 尽管速度(性能)很重要,但其他衡量设计优良性的措施更为重要 ,例如修改和扩展数据库范围或简化编程的能力。

最后,任何与数据库混淆的人都需要理解数据的价值往往超过捕获数据的系统

呼!


好问题。 以下是没有特定顺序的一些想法:

  • 规范化,至少是第二种正常形式,至关重要。

  • 通过适当的级联删除和更新考虑,参照完整性也是必不可少的。

  • 正确使用检查约束。 让数据库尽可能多地完成工作。

  • 不要在数据库和中间层代码中分散业务逻辑。 选择一个或另一个,最好是中间层代码。

  • 确定主键和集群键的一致方法。

  • 不要超过索引。 明智地选择你的指数。

  • 一致的表和列命名。 选择一个标准并坚持下去。

  • 限制数据库中将接受空值的列数。

  • 不要被触发器带走。 他们有他们的使用,但可以使事情匆忙复杂化。

  • 小心使用UDF。 它们很棒,但是当你不知道它们在查询中被调用的频率时,可能会导致性能问题。

  • 获取Celko关于数据库设计的书。 这个人傲慢但知道他的东西。


  • 首先,开发人员需要了解有关数据库的信息。 它们不仅仅是放入SQL并释放结果集的魔法设备,而是非常复杂的具有自己的逻辑和怪癖的软件。

    其次,针对不同目的有不同的数据库设置。 如果有数据仓库可用,您不希望开发人员将历史报告从联机事务数据库中删除。

    第三,开发人员需要了解基本的SQL,包括连接。

    过去这取决于开发人员的参与程度。 我从事过开发和事实上的DBA工作,那里的数据库管理员只是走在过道上,而DBA在他们自己的领域。 (我不喜欢第三个)。假设开发人员参与数据库设计:

    他们需要了解基本的正常化,至少是前三种正常形式。 除此之外,任何事情都可以得到DBA。 对于那些有美国法庭经验的人(以及随机电视节目在这里计数),有一些助记符:“依靠钥匙,整个钥匙,只有钥匙,所以帮助你Codd。”

    他们需要掌握一些关于索引的线索,我的意思是他们应该知道索引需要什么以及它们如何影响性能。 这意味着没有无用的索引,但不会害怕添加它们来协助查询。 任何进一步的东西(比如天平)都应该留给DBA。

    他们需要了解数据完整性的需求,并能够指出他们验证数据的位置以及他们在发现问题时所做的工作。 这不一定要在数据库中(对于用户来说很难发出有意义的错误消息),但必须在某个地方。

    他们应该具备如何制定计划的基本知识以及如何阅读计划(至少足以说明算法是否有效)。

    他们应该隐约知道触发器是什么,什么是视图,并且可以划分数据库。 他们不需要任何细节,但他们需要知道向DBA询问这些事情。

    他们当然应该知道不要干涉生产数据或生产代码或类似的东西,他们应该知道所有的源代码都进入了VCS。

    我无疑忘记了一些事情,但普通开发人员不一定是DBA,只要有真正的DBA在手。

    链接地址: http://www.djcxy.com/p/37947.html

    上一篇: What should every developer know about databases?

    下一篇: When and why are database joins expensive?