这更像是一个面向业务的编程问题,我似乎不知道如何解决。我和一个程序员团队一起工作,他们使用 BASIC 已经有 20 多年了。我被请来帮助在 .NET 中编写相同的软件,只是进行了更新和现代实践。问题是我似乎无法让其他 3 名团队成员(所有 BASIC 程序员,尽管现在也有 .NET)了解如何正确创建关系数据库。这是他们不会理解的事情:

我们基本上有一个跟踪客户标签信息的交易。我们需要能够跟踪当前交易和过去的交易。在旧系统中,使用平面文件数据库,其中一个表包含客户当前基本交易的记录,另一个表包含客户之前的所有交易以及重要的资金信息。为了防止冗余,他们会用历史交易覆盖当前交易 - (历史文件首先更新,然后是当前的。)这是完全没有必要的,因为你只需要一个交易表,但我的主管或我的其他两个同事中的任何一个-工人们似乎无法理解这一点。我究竟怎样才能说服他们看到光明,这样我们就不必做大量荒谬的工作并最终多次访问数据表?感谢您的投入!

有帮助吗?

解决方案

首先,我必须承认,这不是从你的描述非常清楚对我有什么数据结构和逻辑在现有的结构实际上是流动。这并不意味着,我认为也许你不使自己清楚你的同事要么,所以你的首要任务之一必须是能够解释,无论是口头或最好以书面和图表,目前的情况和建议更换。请以此为观察,而不是你的问题的任何批评。

其次我也觉得很了不起的20年经验的程序员不了解关系数据库和交易。平面文件编码走出了主流的很长一段时间以前 - 我第一次在商业环境在1988年处理的关系数据库回来,他们是相当普遍在90年代中期。哪些部门和产品类型,你的工作吗?这听起来可能对我来说,你可能会用某种嵌入或“不寻常”系统,在这种情况下,你需要确保你没有某种形式的通信问题要处理,你就可以俯瞰大型大象尚未指给你 - 你不会带入谁已经没有被送入相应的信息建立了以某种方式一队的第一个“顾问”。这就是说这种古老的商店也依然存在 - 我现在的客户系统接口,一台基于文件系统的COBOL编码之一,是的,它是地狱来管理; - )

最后,如果你完全确定自己的立场,而你面对的是一个团队谁也不会采纳你的建议 - 示范代码是一个好主意,如果你能抽出时间 - 那么你可能有优雅地接受的决定,并移动一个。自己在这个位置上我会试图抽象出来的问题 - 可以在数据库的更新被移动到例如存储过程,因此及时更新这两个表的代码是在SP,可以在稍后的日期进行修改,以移动到您的架构没有相应的应用变化?确保你的论点是有据可查的,并记录以便以后可以重新审视他们应该有机会出现。

您不会是第一个编码器谁是有实现,因为办公室政治的一个次优的解决方案 - 使用它作为自己的个人发展有关处理这种情况下一个学习经验,并与你会得到报酬的想法同情自己对于额外的工作。通常在这种论调的决定性因素不是逻辑,而是你自己带来的表“美誉的重量” - 这听起来像你已经把没有太多那种与你的团队的杠杆作用,让你可能要对在实施他们也同意你在随后的情况下足够的信誉之前做exceling赢得声誉的工作 - 你需要先改装了

其他提示

有时你不能。

如果你读了一些书XP,他们经常说,你的最大障碍之一将说服你的团队放弃了他们一直这样做。

通常他们会建议让谁也无法适应去其他项目(或只是让他们去)的人。

代码审查可能会帮助你的情况。每行代码的强制实施代码审查是没有先例的。

有时最好参数是一个例子。我会写一个原型(或更换,如果没有太多的工作)。用一个例子来检查它会更容易看到一个关系数据库的优点和缺点。

顺便说一句,平面文件数据库有他们的地方,因为他们是如此容易得多“管理”不是一个真正的关系数据库。保持开放的心态。 ; - )

我想你可能必须要以身作则 - 当人们看到“新”的方式是他们将采取它(只要你不惹他们的鼻子的话)较少的工作

我也问自己旧的设计实际上是否导致了问题,还是它只是美学讨厌。重要的是要选择你的战场是很重要的 - 如果旧的设计不会导致性能问题或使系统难以维护,你可能想独自离开旧的设计。

最后,如果你离开旧的设计到位,尝试和抽象的新代码和旧数据库之间的接口,所以如果你说服你的同事进行改进设计后,你可以删除在没有新的模式不必改变任何东西。

有难以提取一大堆除了从原来的问题一般挫折。

是的,有很多的技巧和习惯长定时器拿起随着时间的推移,可以是无用的,甚至在技术变革的光昂贵。有些事情的处理能力,内存的时候是有道理的,甚至是磁盘成本可以在优化愚蠢的尝试了。这也是非常多,人们积累的坏习惯和坏的编程模式随着时间的情况。

您必须要小心,虽然。

有时,对于这些事情的老前辈做的很好的理由。可悲的是,他们可能甚至无法用语言表达的“为什么” - 如果他们甚至知道为什么了。

我看到很多这种无奈的时候新手进入企业软件的开发工作室。即使环境是所有颇具现代技术和工具,这可不好。如果你的大部分经验是写小社区的桌面和Web应用程序有很多的你“知道”什么可能是错误的。

经常有事务在要求上面你的DBMS可以做一个级别的日志。往往可能有必要超越DB事务语义,以保证时间序列的正确性,一次且仅一次更新,resiliancy,和不可否认性。

这甚至没有开始处理涉及企业或企业间的可扩展性问题。当你开始每天接近五十万复杂的交易,你会发现,RDBMS技术没你。因为关系数据库不能处理大量交易,你必须经常使用的标准范式的规范化和更新打破。传统的RDBMS锁定技术可以破坏的可扩展性,无论你有多少硬件抛出这个问题。

这是很容易关闭所有它作为stodginess或一般错误头晕 - 甚至无能。但要小心,因为这是情况并非总是如此。

顺便说一句:有除了RDBMS其他车型,以及替代的RDBMS是不一定是“平面文件” - 违背了当今大多数程序员的经验。有可以处理更高的吞吐量比RDBMS事务层次的DBMS。 IMS 是仍然非常活跃在大型IBM的商店,例如。其他供应商提供的不同平台类似软件。

当然在一4人店也许这一切都不适用。

为他们报名参加一些像样的培训,然后你就可以让他们相信,有了新技术,更多的事情是可能的(或者至少更容易!)。

但我认为这里最重要的是专业的、经过认证的培训师首先教他们基础知识。他们会对这一点印象更深刻,而不仅仅是一位同事告诉他们:“嘿,为什么不用这个呢?”

相关帖子 这里.

下面可能无法在年情况适用,但你做的技术细节很少提及,所以我想我会提到它...

有时候,如果在访问模式是用于比对历史数据的当前数据(我正在做这个例子,但说,目前的数据是每秒访问次数1000,以及存取列的小的子集,和非常不同的在小于1 GB所有当前数据适合,反之,说,历史数据使用绿带的1000,被访问仅每天倍100S,并获得对所有列),

那么,你的同事正在做的事情就非常清楚了,对于性能优化。通过分离的电流数据(albiet冗余)可以优化索引和数据结构在该表中,对于更高的频率访问paterns,你不能在历史表做。

不是一切是“学术”时,或当在实际的实际情况施加从纯粹的关系透视“技术上”正确很有意义。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top