ISBN作为主键,现在我想在数据库中添加非书籍内容 - 应该迁移到EAN吗?

2 投票
4 回答
1945 浏览
提问于 2025-04-15 21:25

我建立了一个库存数据库,书籍的ISBN号码作为商品的主键。这在一段时间内运行得很好,因为这些商品都是书籍。现在我想添加一些非书籍的商品,其中一些有EAN码或ISSN码,有些则没有。

这个数据库是用PostgreSQL搭建的,前端是用django应用程序,还有一个JSON API,另外还有一些支持的Python命令行工具来管理。现在讨论的商品主要是书籍和艺术印刷品,其中一些是自出版的。

使用ISBN作为主键的好处是,除了保持数据之间的关系完整性外,还有很多方便的工具可以用来验证ISBN,自动查找书籍的缺失或额外信息等等,我已经利用了很多这样的工具。有些工具是现成的(比如PyISBN、PyAWS等),有些是我自己做的——我尽量让这些部分保持独立,但你知道事情有时会变得复杂。

我在网上找不到关于“私人ISBN”或“自分配ISBN”的任何信息,但这正是我想做的事情。我怀疑这会是我最终的选择,因为现在似乎已经有很多人抢着申请ISBN号码了。

我应该把一切都改成使用EAN号码,还是干脆不再用ISBN作为主键呢?如果有人有这方面的经验,我非常想听听你的建议,欢迎分享。

4 个回答

3

我同意the_lotus的看法,主要是因为ISBN作为主键并不是个好选择。

从数据的角度来看,ISBN可能不够唯一。如果把它放在一起,它的长度比较长,而且不是数字。

举个例子

3

我对Postgres不太了解,但通常来说,ISBM应该是一个唯一的索引键,而不是主键。主键最好用整数类型,这样在做外键的时候也更方便。这样你只需要添加一个新的字段,叫做EAN或ISSN,并且这个字段可以为空。

2

如果你在用ISBN-10的书号,那你应该考虑换成别的,因为ISBN-10已经不再使用了。其实,你可以很简单地把ISBN-10转换成ISBN-13(可以参考一下维基百科),我觉得ISBN-13是和EAN兼容的(同样可以查看维基百科)。不过正如the_lotus所说,最好是用一种没有外部意义的自动递增整数作为主键,然后再用EAN/ISBN等进行索引。

撰写回答