在我看来,数据库技能分为三个“轨道”:开发人员、DBA 和架构师。从开发的角度来看,您希望专注于开发、了解 Architect 并在此过程中尽可能多地学习 DBA 知识。
作为一名开发人员(在我看来),关键是让你的 SQL 达到一个非常好的标准。作为面试官,如果我正在寻找开发人员,我不在乎您是否可以设计数据库,就像您如何编写查询一样。假设您了解基本的 CRUD 命令,您是否了解:
存储过程(不仅仅是如何使用它们,而是何时和为什么)
视图(同上,包括物化视图)
触发器(插入、更新、删除、如何和为什么)
游标(尤其是对性能的影响)
参照完整性
事务
索引
添加默认值、约束和表的身份
复杂使用 group by 和具有
功能,尤其是:
- 日期和时间操作
- 字符串操作
- 处理空值
您应该能够单独使用 SQL 从数据库中提取您需要的任何数据,您永远不需要使用您的程序代码以任何方式操作或解析它(您可以选择,但这将是一个选择,而不是您没有知道如何用 SQL 来做)。
作为一名开发人员,我会查看 Joe Celko 为 Smarties 编写的 SQL。很多 SQL 来做你可能从未真正想过能够在 SQL 中做的事情。
学习这些东西的最好方法之一是写报告(管理信息),虽然看起来很乏味。我见过很多人抱怨写报告很乏味,然后写得非常非常糟糕(不仅仅是因为他们没有尝试)。报告往往接近于纯 SQL,因此您必须真正了解手头的工具,而复杂的报告确实将那些了解 SQL 的人和不了解 SQL 的人暴露出来。人们也往往不想为他们等待太久,所以性能也是关键。
查看您当前的数据库,并想出一些可能有人真正想知道的非常非常尴尬的事情。想想最流行和最不流行的营销、趋势。然后尝试将它们组合成一个查询。
在性能方面,我还试图深入了解查询优化器的工作原理,它如何决定何时使用索引和何时进行表扫描,索引何时有帮助以及何时它们会阻碍。
一个优秀的开发人员不仅会编写好的查询,他们还会编写快速、可维护的查询。要真正掌握这一点,您需要使用一个包含十几个(或更多表)的数据库,理想情况下,该数据库包含数百万行。那是当您开始看到您认为可以拖后腿的查询时。
其他人已经很好地涵盖了建筑师/设计师的东西。关于这个主题我想说的是,对于每个必须设计的数据库,都需要为其编写数百个查询。当您提高技能时,您可能需要考虑按比例分解工作,并确保您的查询确实符合要求。
就链接而言,它取决于平台——所有这些东西往往是特定于平台的。但这就是谷歌的目的。
不是我完全怀疑你想要什么,但值得知道,因为很多认为他们知道 SQL 的人真的不知道......