代码之家  ›  专栏  ›  技术社区  ›  fish2000

ISBNS被用作主键,现在我想向数据库添加非书籍内容——我应该迁移到EAN吗?

  •  2
  • fish2000  · 技术社区  · 15 年前

    我建立了一个库存数据库,其中ISBN号是项目的主键。因为这些东西都是书,所以在一段时间内效果很好。现在我想添加非书籍。有些非书籍有EAN或ISSN,有些没有。

    它在PostgreSQL中,带有用于前端和JSONAPI的django应用程序,以及一些支持管理的python命令行工具。所讨论的项目主要是书籍和艺术家印刷品,其中一些是自行出版的。

    使用ISBNS作为主键的好处在于,在关系完整性的基础上,您可以获得许多方便的实用程序来验证ISBNS,自动查找有关图书项目的丢失或附加信息,等等,其中许多都是我利用的。有些这样的工具是现成的(pyisbn、pyaws等),有些是手工卷制的——我试图保持所有这些部分的良好性和分离性,但你知道怎么做。

    我在网上找不到任何关于“私有ISBNS”或“自分配ISBNS”的东西,但这正是我感兴趣的事情。我怀疑这就是我将要解决的问题,因为ISBN数字已经有了明显的增长。

    我应该为EAN编号重新配置所有内容,还是将ISBNS作为主键迁移?如果有人有使用这些系统的经验,我很想听听,非常欢迎你的建议。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Isaac    15 年前

    如果您使用的是ISBN-10S,那么您肯定应该迁移到其他地方,因为这些已经被弃用了。您可以轻松地使用ISBN-10s并将其转换为ISBN-13s(请参见 wikipedia ,我认为这是EAN兼容的(再次,请参见 维基百科 ,但正如Lotus所建议的,最好使用某种没有外部含义的自动递增整数作为主键,然后在EAN/ISBN/等上进行索引。

        2
  •  3
  •   the_lotus    15 年前

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

        3
  •  2
  •   gbn    15 年前

    我同意“Lotus”,尤其是因为ISBN对于主键来说是一个糟糕的选择。

    数据方面,它可能不够唯一。如果是聚集的,它是非常宽的,并且不是数字的

    Example

        4
  •  1
  •   Joshua D. Drake    15 年前

    一个简单的解决方案(尽管可以说是好的)是使用(isbn,title)或(isbn,author),这在很大程度上保证了唯一性。思想是伟大的,但实践也是有目的的。