晚上十一点半。屏幕一暗,我照例摸黑划开那个早就不怎么更新的通讯录。手指头在几个名字上悬着,蹭来蹭去,到底没按下去。忘了?不是。门儿清得很。拨过去该唠点啥,啥话得往回咽,心里那根弦,绷得比琴弦还紧。以前我总爱把这事儿包装成“岁月磨出来的分寸感”,后来瞎翻一本旧教材,才咂摸出味儿来。去他的分寸感,这玩意儿说白了,就是人情世故里的一套防呆设计。半夜打电话,十回有八回是打扰,剩下两回,十有八九是借钱。谁心里没本账呢?

那是本《Visual FoxPro数据库程序设计》。封面黄得跟腌透的菜叶子似的,卷边都起毛了。书里大段大段扒拉着表跟表之间的勾连。关系型数据库的脾气,压根不是把数据往死格子里塞。而是拿主键和外键,把它们一根根拴死。书里死磕“参照完整性”这词儿,意思特直白:你删了A表里的一条记录,B表里指着它的那堆数据,立马就悬了空。系统可不惯着你。直接给你抛个错。除非你提前把级联操作配好,或者自己手动去把那些悬着的尾巴捋顺了。当年为了考个证啃的,现在看那些代码注释,跟看前任的聊天记录似的。密密麻麻,全是当年的执念。但道理,确实没跑偏。

盯着那行字,我愣了两秒。这比喻乍一听有点绕弯子,可你越琢磨,越觉得是在照镜子。咱们这人际关系,说白了就是一堆互相打钩的表。主键?卡在生命里最核心的槽位,换不了。外键呢?依附着一段经历,一个圈子,或者某个人。年轻时多狂啊。觉得关系想加就加,想删就删。处不来?拍掉。累了?清空列表,重开。真到了岁数,才碰一鼻子灰。人哪是数据库里的冷冰冰的记录。你单方面敲个删除键,根本不会弹提示框。可那些共享过的记忆,共同认识的老伙计,连带着你自己某段时期的脾气秉性,全跟着报“参照错误”。系统没动静。心口却咯噔一下。我就见过有人拉黑了一个搞创业的死党,结果后来组局,连人家老婆那边的资源链都断了。这事儿未必是坏事。但那种“牵一发而动全身”的失重感,确实挺磨人的。

以前我总嫌维持交情太耗神。得记着谁不吃香菜,谁过生日不能忘。不同圈子的人凑一块儿,还得看脸色。生怕一句没踩准,就触发什么隐藏规则。后来才慢慢捋顺,咱们这其实是在搞一场漫长的规范化。把那些重复的、凑数的、根本立不住脚的社交,慢慢筛掉。只留下真正能双向对接的部分。这不是变冷血。是给自个儿的精力划个重点。数据库靠索引提速,咱们也得把时间砸在那些双向验证过的链接上。剩下的,随便它们躺在归档表里吃灰。不过话说回来,这“规范化”搞得太狠了,人反而容易变成孤岛。有些看起来冗余的饭局,硬着头皮加的群,当年觉得是浪费时间。现在想想,说不定正是那些“低效”的碰撞,才没让咱们的生活彻底死机。我觉得未必全对。但确实是个现实。

不过,规范化也不是把硬盘格式化。书里也透了底,有时候为了跑得快,会故意留点冗余。日子大概也这德行。偶尔的插科打诨,翻来覆去讲烂的老梗,明明可以不搭理,却偏要甩一句“最近咋样”的消息。看着挺废时间,甚至白白占着内存。可真遇上哪天突然断电,手机没电,心里发空的时候,反倒只有这些看着多余的“废数据”,能拿出来当救命稻草读。就像我那个大学室友,三年没联系,朋友圈也就互相点过两次赞。但去年我半夜失眠,随手戳了他头像。他居然秒回了一句“又熬鹰呢?”。你看,这冗余数据,关键时刻真能救命。

我有时候也纳闷,咱们到底是死磕关系的完整,还是怕一松手就掉进参照错误的坑里?估计两头占。人嘛,就爱在天天变天的日子里,死死拽住几条确定的线。就像那些写死的外键约束,不保证永远不跑偏,只保个底:就算变了,也还能顺藤摸瓜找着根。我倒觉得,有时候“悬空”点未必是坏事。非得把每条线都勒紧了,万一哪天对方走了,你自个儿也得跟着断崖式下跌。留点弹性,可能比死磕“参照完整”更抗造。

书皮合上的时候,外头连个车轱辘声都听不见了。手机往床头柜上一扔,屏幕朝下。通讯录里那串名字,还是老样子趴在那儿。我不打算删,也不折腾着去改签名档。有些线,本来就没必要天天去跑个查询。只要心里有数,知道它们还在那儿,知道那些曾经搅在一起的底片没彻底洗没,也就够了。

数据库知道定期存备份,人也是。只是咱们存下来的,压根不是什么严丝合缝的完美档案。存的全是那些允许带刺、允许暂时掉线、但哪天又愿意硬着头皮重新连上的,笨拙又真实的自己。说到底,人哪会存什么完美档案啊。能有个随时能连上的端口,哪怕平时灰着,心里也踏实。这就挺行了。