Answers:
要真正欣赏什么数据库程序员,您真的必须自己动手-让我尝试用另一种方式解释它。
该消息不灵通它可能看起来像在理想世界中的应用程序员并不真正做到这一点了-他们采取的要求和流程所写的业务分析,并将它们转换成代码,做程序员的出价。
当然,任何有编程经验的人都会知道这不是它的工作原理-暂时忽略了需求从来没有详细说明应用程序行为的事实,这会带来很多复杂性
(当然,这是一个大大减少的列表,我只是想了解数据库开发中具有相似之处的要点)
好的数据库开发几乎是一样的-令人生厌的是,它看起来非常简单,但是一旦您参与其中,您就会意识到数据库开发的特定复杂性:
就像应用程序开发充满了隐患(线程问题等)一样,数据库开发也是如此,犯这些问题的后果往往非常严重(例如,使用数据库的所有应用程序的数据丢失或潜在的停机) 。
我认为,使程序员认为没有任何事情的事情(“程序员不能这样做吗?”)是角色之间有很多重叠之处,而且他们确实需要类似的技能-我已经毫无疑问,只要有时间和经验,任何有能力成为一名优秀开发人员的人也有能力成为一名优秀的数据库程序员,但是,任何人都不应低估经验丰富的数据库专家的价值。
数据库程序员可以做很多事情。首先,他们设计数据库结构,以便它将在预期记录数下正常运行。对于几千条记录有效的设计结构可能会使数百万条记录的数据库无法使用。他们还需要确保数据将随着时间的推移保持其完整性,并且确保数据不受未经授权的更改或盗窃的影响。他们必须透彻了解规范化,何时规范化以及为什么。他们必须了解性能以及如何确保数据完整性。他们必须了解安全性以及如何防止数据被盗或恶意更改。
他们执行调整查询。我更改了查询,该查询需要几分钟才能运行到毫秒。我已将耗时24小时以上的流程更改为不到30分钟。他们设计并维护索引结构,该结构将在插入速度与选择速度之间取得平衡。
他们编写复杂的查询,尤其是报告查询。由于需求的复杂性,我个人已经写了超过1000行的查询。他们仍然必须并且确实运行很快。
他们创建数据仓库和附带的ETL流程来支持它们。通常,他们需要编写流程以从其他来源获取数据,并且必须弄清楚如何将某些客户端数据库中的字段映射到他们的客户端,而这些数据类型,数据大小,必填字段,查找值,等等
他们必须确定如何随着数据库需求的变化而重构,而又不损害已经拥有的1亿条记录,也没有完全停止使用数据库。大型数据库可能涉及数千个表以及存储的proc和用户定义的函数。理解这种结构需要时间和技能,而理解将受更改以及如何影响的内容也需要时间和技巧。
他们设计了出于法规和恢复原因审核数据的方法。然后,他们设计从这些审计表中恢复数据的方法。他们研究数据问题,以发现问题是由于导入过程中的错误,其他人提供的错误文件,来自应用程序的错误插入/更新,还是来自未经授权的访问。当应用程序程序员留下漏洞供黑客攻击时,他们找到了修复不良数据的方法。
通常,它们涉及从一个系统到新系统的数据转换。有时,这涉及将数据从一种COTS产品移动到公司刚购买的新产品。就像前面介绍的进口一样,这些都是复杂的过程,可能需要数月的时间来计划和执行,并且需要大量测试。与导入不同,数据库程序员可能无法控制不同的数据结构。
我曾在90年代后期担任数据库程序员,负责24小时晶圆厂的制造数据。我不知道我的职责有多么典型,但是对我来说最大的一部分是当需要更改字段编码或架构时,我必须确保所做的更改对生产而言是无缝的。从本质上讲,这意味着我将告诉他们升级其客户端应用程序,他们会在方便的时候进行此操作,并且希望新的更改会立即恢复。
这比我预期的要复杂得多。转换脚本和客户端软件必须进行彻底的测试。通常必须同步维护两个语义相同但不兼容的数据集,直到每个人都被切换为止。有时,有必要在多个精心计划的阶段中进行切换,以使其无缝。准备好几周以实现瞬间发生的转换并不少见。
如果数据库程序员正确地完成工作,那么在观察者看来,他的工作非常容易。许多人并不真正知道自己在做什么,这并不奇怪。
这很简单。如果您听说过类似MVC模式,则应该了解控制器和模型之间的区别。例如,如果您正在编写ERP,则可以想象您在控制器中只是对模型说“ retrieveCashFlow”,然后模型调用数据库中的存储程序。这个存储的程序负责所有的连接,过滤,排序等操作,您将获得处理后的数据。在您的控制器中,您只需要将事情混在一起即可。
如果您对存储过程有疑问,请查看以下内容: 为什么使用存储过程?
简而言之:数据库开发人员为您的应用程序编写存储的程序(过程和函数),以照顾MVC中的M(如果您不使用mvc,则使用业务逻辑)。
Oracle不仅是一个数据库,而且是一个完整的编程环境,包括表单和报表设计器。作为Oracle程序员,您可以编写完整的用户应用程序。您引用的数据库编码通常由专业的数据库管理员(DBA)完成。
我认为Sybase是另一个具有类似编程环境的公司。
其他数据库可能将自己限制为“仅”允许定义和执行报告,而其他数据库可能根本不提供任何形式或报告设计/执行工具。