对于我目前正在构建的应用程序,我需要一个数据库来存储书籍。books 表的模式应包含以下属性:
id, isbn10, isbn13, title, summary
我应该为 ISBN10 和 ISBN13 使用哪些数据类型?我的第一个想法是大整数,但我读过一些未经证实的评论,说我应该使用 varchar。
你会想要一个CHAR
/ VARCHAR
(CHAR
可能是最好的选择,因为你知道长度 - 10 和 13 个字符)。像这样的数字类型INTEGER
将删除 ISBN 中的前导零,例如0-684-84328-5
.
例如,ISBN 编号应存储为字符串varchar(17)
。
ISBN13 需要 17 个字符,13 个数字加上连字符,ISBN10 需要 13 个字符,10 个数字加上连字符。
ISBN10 号码虽然称为“数字”,但可能包含字母 X。ISBN 号码中的最后一个数字是一个介于 0-10 之间的校验位,10 表示为 X。另外,它们可能以 double 开头0
,例如as0062472100
和作为数字格式,它可能会在00
存储后删除前导。
84-7844-453-X是一个有效的ISBN10号码,其中84表示西班牙,7844是出版商编号,453是书号,X(即10)是控制位。如果我们删除连字符,我们会将publisher 与book id 混合。真的很重要吗?根据您对该号码的使用情况。书目研究人员(我发现自己处于这种情况)可能出于许多我不会在这里讨论的原因需要它,因为它与存储数据无关。我建议不要删除连字符,但事实是每个人都这样做。
ISBN13 在含义方面面临同样的问题,因为连字符可以得到 4 块有意义的数据,没有它们,语言、出版商和图书 ID 就会丢失。
尽管如此,控制数字只会是0-9,永远不会有字母。但是,如果您想只存储 isbn13 号码(因为 ISBN10 可以自动升级到 ISBN13)并使用int
,那么您将来可能会遇到一些问题。所有 ISBN13 号码都以 978 或 979 开头,但将来可能会添加一些 078。