同时收纸书和电子书的人,迟早会撞上同一件事:手上明明有电子版,在书店又买了一本纸书。
想解决它,就得让两边的书目能一起查。但真动手就会发现,两边的字段根本对不齐。
先决定:合并到什么程度
分开存,但要能一起查。 这两件事不矛盾,而且这是最省事的组合。
为什么不建议物理合并成一张表:
| 纸书需要 | 电子书需要 | |
|---|---|---|
| 特有字段 | 位置、状态、借出人、购入日期 | 格式、文件位置、阅读进度、设备 |
| 主要动作 | 找得到、借得回 | 传得到设备上、搜得到内容 |
| 数量级 | 几百 | 常常几千 |
合并成一张表的直接后果是一半的列常年为空,看着就不想维护。而且每次操作前你都得先想「这条是哪种载体」。
但为什么又必须能一起查: 你真正要防的是「有电子版还买纸书」和「有纸书又买电子版」,这只有在同一次查询里看得到两边时才拦得住。
折中方案:以纸书书目为主,电子书只登记「我有电子版」这一个标记。 格式、文件路径、阅读进度一律不进来。
判断某个字段该不该进合并表,一句话:只对一种载体有意义的字段,就不该进。
主键:ISBN 优先,但一定要有兜底
问题在于大量电子书根本没有 ISBN:
| 电子书来源 | 有没有 ISBN |
|---|---|
| 正版电子书店 | 通常有,且与纸书版对应 |
| 出版社自出的 EPUB | 可能有,也可能只有内部编号 |
| 自制 / 扫描 / 网络来源 | 基本没有,identifier 常是随机 UUID |
| 自出版平台 | 有 979-8 书号,但公共库查不到元数据 |
兜底用书名 + 作者做次级键,规范化至少要做四件事:去掉书名号、去掉副标题、繁简统一、清理全角半角空格差异。
次级键既会漏报(译名不同、副标题写法不同),也会误报(同名书、上下册)。所以规则应该是:
- 主键匹配 → 自动合并
- 次级键匹配 → 只做提示,人来确认
别试图全自动。
同一本书的纸质版和电子版,不是重复
它们是同一本书的两种载体。用途不同——纸书用来读和收藏,电子版用来检索、摘录、出门带。很多人是有意两个都收的。
但它们必须能互相看见,因为最常见的浪费恰恰发生在这里。
建议的表达方式:一条记录,加一个「载体」字段,可以同时勾选纸质和电子。 而不是建两条。
好处很直接:
- 查重时天然命中
- 统计藏书量时不会重复计数
- 「我有这本的电子版吗」变成一个能查的问题
唯一的例外:如果纸书和电子版是不同版本(不同译者、不同出版社),那就是两本书,不该合成一条。
合并之前,必须先修元数据
EPUB 的元数据由制作方随手填写,没有任何强制校验,而且后续每一次格式转换都可能再破坏一次。
常见的脏数据:
- 作者写成「佚名」「未知」,或者制作者的网名
- 书名带一堆后缀:
(精校版)、【全本】、_v2 identifier是随机 UUID,不是 ISBN- 语言标成
en,中文排版规则跟着出错 - 系列和序号全空,同一套书在阅读器里散落各处
为什么必须先修再合并: 你的次级键靠的就是书名和作者。这两个字段脏,去重必然失效——《百年孤独》(精校版) 永远匹配不上纸书那条 百年孤独。
顺序是:先批量清洗元数据 → 再导出书目 → 最后合并。 反过来做,你会在合并表里重复清洗同一批脏数据。
清洗到什么程度就够
只管四个字段:
书名——去掉制作方后缀;副标题统一处理,要么都带要么都不带;不要自己改写原书名。
作者——译名统一到一个写法,这是收益最大的一条;多作者用统一分隔符;别把译者塞进作者字段。
ISBN——没有就留空。不要用纸质版的书号硬填,那会让两条记录被误判成同一册;除非你确认这份电子版就是该纸质版的官方电子版。
系列与序号——Calibre 和 EPUB3 记系列的字段不是同一个,两边都写上兼容性最好。
出版社、出版日期、简介、封面不用清洗——它们不参与去重。
维护规则:单向,不要双向
合并完成之后,定一条规则再往下走:
新书从哪一边进,就在哪一边先落库,另一边只做标记。
推荐以纸书书目为主库——纸书有位置、借还这些必须逐册管理的信息,天然需要一份正式记录。电子书进来时先查主库,有就在那条记录上勾「电子版」,没有就新建并标明只有电子版。
双向同步在没有工具支撑的情况下必然失同步。 两边各改一次,就再也对不上了。
节奏上:
- 纸书当场登记,这一步不能省——纸书没有文件系统兜底,漏了就是真漏了。
- 电子书可以攒,文件本身就是备份,不会丢。
- 每隔一段时间批量把新增电子书对一遍主库。
最后一个提醒:不要追求两边完全对齐。 能拦住重复购买,就已经拿到九成收益了。剩下的完整度是收藏癖,不是需求——而为收藏癖付出的维护成本,往往就是整套书目最后被放弃的原因。