详情

第13章

第十三章 九章邮件


下午三点钟,在机房里。


她将问题清单放在了林一苇的桌子上。


林一苇翻了四页,停在第三页,指着一行字问道:“销售明细,按单拆表-是你写的?”


“嗯。”


“你知道拆了表,程序里多少地方要改吗?”


她没有开口。


“销售,退货,盘点,报表,全是从这张表里捞数。”林一苇把清单拍回桌上,“四十多处SQL。拆一张表,四十多处都要跟着改。月底之前上线,谁来改?”


“我改。”


机房里静悄悄的。


林一苇看着她,没有马上开口。她也没有躲开。


她知道为什么要写上那一行字。上午看销售明细表,看了四十分钟。一单三件货,旧库拆三行,每一行都要记录客户的姓名,日期,订单号。一个月卖出300单,就有900条重复的数据。哪天客户把名字改了,九百条记录里有一条没改,导致账目不一致,也说不清是哪一条的错。


她当时就想,这表得拆。


“拆坏了怎么办?”林一苇问。


“坏了,我修。”


“上线之后出现问题呢?”


“我来扛。”


林一苇又看了她两秒,就把清单折好放进了抽屉里。


“行。”他说,“你拆。但是有一条,先修改测试库,跑通了再上生产。不要用正式的数据来练手。”


“知道。”


“另外,”他说,“不要耽误白天给客户改需求。那边也在催。”


她点了头。


出了机房,她才发现自己的手心全是汗。


她刚刚跟人立了个军令状。四十多个SQL,月底之前就要上线。


下午她就开始动手了。


旧的销售明细表是一张大表。一个订单里有三种商品,分成三行记录,每一行都有客户的姓名,日期,以及订单编号。她按照进销存的思路,将它分为两张:销售单和销售明细。


拆了一半就卡住了。


程序中的SQL语句写的不是“查销售单”,而是“查销售明细表,把客户的姓名,日期,以及订单号都捞出来”。表一拆,这段SQL就失效了。


她翻到那段代码看了很久。


代码是老同事写的,没有注释。一行行看下去,看得她的太阳穴都疼。有一个地方,变量名打错了,但是程序还是能跑-她看完了三遍之后才知道这是故意这样写的,老同事留了一个后门用来查数据。


她没有动那个后门,继续往下读。


一直到下班,才改了十一处。


还剩下三十多个地方。


晚上坐公交回石牌村,脑海里还在想那些SQL。车子摇晃得很厉害,她靠在车窗边,把白天修改的地方又过了一遍。有一处不确定,修改之后查询会不会变慢。想到一半就没想明白。


巷口的网吧里,机器的声音很大。靠近门口的一台还是原来的样子,键盘上少了一个键,老板用圆珠笔芯堵着。她把五块钱放到台面上,坐了下来,打开了邮箱。


收件箱里有封新邮件。


发件人:九章。


标题:《关于范式(有点长)》。


她点了一下鼠标,就把邮件打开了。


“小满:


上次你在BBS上问的表结构问题,三言两语说不清楚,就写一封邮件详细说明。


数据库的设计中有一个叫范式的概念。简单来说,就是表该怎么建,才不会乱。


第一范式:字段不可再分。一个格子里只能放一个数。不能写‘北京,上海,广州’,那是三个数,要分成三行写。


第二范式:表中的每一个字段都要与主键有关。你的进销存,进货价和商品有关,和供应商无关,就不该硬放在一张表里。放在一起,改一次进货价,整个表都跟着乱。


第三范式:字段之间不能拐着弯有关系。仓库地址和仓库编号有关,仓库编号又和商品有关-你不能在进货单上直接写仓库地址,要通过仓库编号去查。多拐一个弯,就多一处错。


三个范式,一层套一层。你平常写的小系统,做到第二范式就够用了。等到做大系统,再去抠第三个。


下面写个例子,你对着看:”


邮件下面贴了段代码:


CREATE TABLE 学生表 ( xiaoman INT PRIMARY KEY, name VARCHAR(20), class_id INT );


她盯着那行字。


手指停在了纸上。


xiaoman。


他在例子中,把主键命名为xiaoman。


她想起自己那份进销存,客户表主键叫id。就叫id。干巴巴的,人人都可以用。


她没有问。也没有改。


她把那一行代码一字不漏地抄在笔记本上,一笔一划,写得很慢。xiaoman,七个字母,她写完一遍之后又描了一遍。第二次比第一次写的要整齐。


网吧里的日光灯发出嗡嗡的声音。她一直看着“xiaoman”,直到旁边打游戏的小青年喊了一声,她才回过神来。


她没有把那句话划掉。


她把那页纸,多折了一个角。


抄完信,她给他回信。


她先回技术问题,把白天卡住的问题原封不动地写上去:


“范式看懂了。我现在手上有个新库要改,今天拆表拆了一半就卡住了-程序里有四十多条SQL都指向旧表,拆了旧表,所有的SQL都要改。我已经改了十一处,还有三十多处没改。


九章,你拆过这样的表吗?拆完之后,SQL怎样修改最省事?”


她担心他看不明白,还画了张简单的图,把旧表的结构也标在上面。


发完之后,她就坐着不动。


她又补充了一句:


“九章,你看新闻没有?纳斯达克每天都在涨,报纸上说搞互联网的人都要发了。”


她点击了发送。


第二天白天,她按照九章邮件里说的第二范式,把拆表方案重新理了一遍。


前一天晚上她拆表,是凭感觉拆的。现在按照范式过一遍,她发现自己昨天拆错了一处:销售单与销售明细之间,少了一张关联表。两单合并为一单时,数据就会串。


她把昨天建的表删除,重新建。建到一半,她想到了九章信里的那句话,“表是用来给人看的,不是用来给程序凑合的”,于是就把字段名也改了-昨天叫a1,a2,今天就变成了order_id,goods_id。名字一清楚,她自己读起来也很顺。


关联表补上,她就开始修改SQL。到中午一共修改了九处。下午修改了十四处。下班前,她把剩下的都改完了-除了不确定的三处,她用问号标出来,等林一苇回来看。


林一苇看了一眼说:“这三处,留到明天,我带你过。”


“好。”


出了机房,她的腿都软了。但是心里有一个地方,是实的。


她拆完了。


到了晚上,她又去了一趟网吧。九章回信了。


信很长,先把她的表批了一遍-三处不对,一处冗余,一处漏了索引,一处字段命名不规范。批得很仔细,就连她建索引的时候少写了一个字段都被指出来了。


她看见“三处不对”那行字,脸就有点热了。


她不服气。


她把信往下拉,看他写的批注。第一处:她建的那张关联表,字段冗余,两个字段能合并成一个,他画了线。她想了想,他说得对。第二处:她漏了索引,大表查起来会慢。第三处:字段命名不规范,他标了红字,旁边写了一句“名字起清楚,三个月后你自己还能看懂”。


她看见那行红字,脸更热了。她今天刚把字段名改成order_id,自得意了一下午-结果人家一眼就看出她还有一半字段叫a1,a2。


她看完,过了一阵子都没动。


她不服气,但是他说的都对。


她回复了一个字:“改。”


信的末尾,他回答了她昨天问的问题:


“昨天你问的,拆表之后SQL怎么改最省事-先修改测试库,跑通了再上生产。不要用真实的数据来练手。”


她看着这句话,愣住了。


昨天白天,林一苇对她说了一模一样的话。


“先修改测试库,跑通之后再上生产。不能用真实的资料来练手。”


一个在广州中轴线那头的校园里,一个在石牌村的机房门口,两个人,说了一样的话。


她看了好长时间那行字。觉得这个九章,离自己没那么远。


信的末尾,还有一段:


“泡沫这种东西,我见过,也怕过。98年的时候,中关村一晚上就冒出了几十家公司,全都是做网页的,烧钱,连眼睛都不眨。当时我认为这样不对。


但是我不担心自己会被卷进去。我有技术,即使泡沫破了,我也能继续写代码,不会饿死。


小满,你也一样。别怕风口,要有本事站在风口上。”


她一直看着“你也一样”四个字,看了很长时间。


她没有回复。


她将信的内容抄在笔记本上。抄到“泡沫”那段,她又读了一遍才翻页。网吧的灯管嗡嗡作响,她将那张纸压平,又看了一遍,才把本子合上。


她没有问他的名字。


他也没有问她。


两个人,一个在广州中轴线那头的校园里,一个在石牌村的网吧里,隔着屏幕,谁也没有向前迈出一步。


最后一封邮件末尾多了一行字:


“如果哪天你来广州中轴线,抬头看一下中信大厦。我在那一带读研。”


看着那行字,她呆住了。


她住石牌村。从石牌村到中信大厦,不到三公里。


她站起身,走出了网吧。巷口吹来的风很冷。她往远处看去,黑乎乎的一片,什么也看不见。三公里以外,那一带,有一栋大楼,还亮着灯。


她看了一会儿,转身往回走。


走了两步,又回过头来看了一眼。


出租屋楼下有一个公交车站牌。每天她都会坐那班车去上班,报站的时候她从不抬头。这一天她蹲下身,借着路灯寻找。站牌上密密麻麻的字,她找到了那一站:


中信广场。


她看了很久这四个字。原来她每天都从它的眼皮底下走过,但是从来没有抬头看过一眼。


她站起来,把外套裹紧,上楼了。


楼道里的灯坏了,她摸黑走。到了三楼,她停下来,拿出笔记本,翻到折角那一页,借着手机屏幕的光又看了一遍那行代码。


xiaoman INT PRIMARY KEY。


她把本子合上,把手机放回口袋里。


楼上电话铃响。她母亲从老家打来的,已经是第三次了。


她接起电话,她妈妈在那边问:“吃了没?”


“吃了。”她说。


她妈妈又问:“过年回不回来?票好不好买?”


她应着,眼睛却一直望着楼道尽头的窗户往外看。窗外一片漆黑,三公里之外的那个方向,什么也看不见。


“满满?”她妈喊她,“你听见没有?”


“听见了。”她说,“妈,我今年,想干出点样子再回去。”


她妈妈那边安静了一下,说道:“行。你忙你的,妈不催你。”


挂了电话。


楼道里又黑了。她站了会儿,才摸黑上楼。


三公里之外的那栋楼,仍然亮着灯。

阅读设置
日夜间模式
日间
夜间
字体大小: 18px
12 48

千禧代码

封面

千禧代码

作者: 炭火烤馍