2

我建立了一个库存数据库,其中 ISBN 号是项目的主键。由于这些物品是书籍,因此这在一段时间内效果很好。现在我想添加非书籍。有些非书籍有 EAN 或 ISSN,有些则没有。

它在 PostgreSQL 中,带有用于前端的 django 应用程序和 JSON api,以及一些用于管理的支持 python 命令行工具。有问题的物品主要是书籍和艺术家版画,其中一些是自行出版的。

使用 ISBN 作为主键的好处在于,除了关系完整性之外,您还可以获得许多方便的实用程序来验证 ISBN、自动查找有关图书项目的缺失或附加信息等,其中许多我已经利用了. 有些这样的工具是现成的(PyISBN、PyAWS 等),有些是手工制作的——我试图让所有这些部分保持良好和分离,但你知道事情会如何发展。

我在网上找不到任何关于“私人 ISBN”或“自分配 ISBN”的信息,但这是我感兴趣的事情。我怀疑这就是我会解决的问题,因为 ISBN 号码已经出现了明显的竞争。

我应该为 EAN 号码重新组装所有东西,还是一般将 ISBN 作为主键迁移?如果有人对使用这些系统有任何经验,我很想听听,非常欢迎您的建议。

4

4 回答 4

3

我不知道 postgres 但通常 ISBM 将是唯一索引键,但不是主键。最好有一个整数作为主/外键。这样,您只需添加一个新字段 EAN/ISSN 即可为空。

于 2010-04-09T18:58:46.490 回答
3

我同意 the_lotus,尤其是因为 ISBN 是主键的糟糕选择

数据方面,它可能不够独特。如果集群,它非常宽且非数字

例子

于 2010-04-09T19:15:15.693 回答
2

如果您使用的是 ISBN-10,那么您绝对应该迁移到其他东西,因为那些已经被弃用了。您可以轻松地将 ISBN-10 转换为 ISBN-13(参见wikipedia),我认为它与 EAN 兼容(再次参见wikipedia),但正如 the_lotus 建议的那样,最好使用某种自动递增整数没有外部含义作为主键,然后在 EAN/ISBN/etc 上进行索引。

于 2010-04-09T19:03:44.530 回答
1

一个简单的解决方案(尽管可以说是否好)是使用 (isbn,title) 或 (isbn,author) ,这几乎可以保证唯一性。意识形态很棒,但实用性也有目的。

于 2010-04-10T16:17:09.993 回答