银行数据库中的“客户id”可以有什么样的数据类型?int还是varchar?

nvbavucw  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(1048)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

一小时前关门了。
改进这个问题
银行数据库中的“客户id”可能具有什么样的数据类型?int还是varchar?
考虑到还有另一个具有“owner”属性的表是“customer id”的外键

zqry0prt

zqry0prt1#

这个问题没有正确的答案。
许多组织使用字母数字序列作为客户id,因此需要使用varchar。
在其他情况下,他们不关心软件开发人员使用什么来形成主键,因此您不妨使用整数来利用mysql的内置自动增量功能(这适用于整数,但不适用于任意字符串)。
因此,您应该了解您的银行组织要求您使用什么作为客户id(如果有的话)。
或者使用一个自动递增的整数,并计划为银行自己的客户id添加一列,这可能是某种字符串。
客户id的数据类型每隔几年就会改变一次也不稀奇,因为有人认为除了唯一性之外,还必须对某些信息进行编码。

edqdpe6u

edqdpe6u2#

对于现实生活中的实体,数据库通常有两个唯一的标识符。
天然钥匙
代理密钥
在您的例子中,自然键可能是一个字符串(varchar),对应于客户可能在银行对账单上看到的内容。可能包括部分姓名和/或出生日期。
然后,代理密钥通常是由数据库创建的唯一整数,仅用于唯一地标识数据库中的客户。因为代理键更小(通常是4字节,而可能是几十字节),所以在外键和索引中使用代理键会占用更少的磁盘空间、内存、io等,因此通常会使数据库更紧凑,运行更平稳/更快。
这种自然/代理键的组合允许代理键只扮演唯一标识行(客户)的角色,并且从不改变。因为,如果它发生更改,从其他表(外键)引用它的所有行也需要更改。自然键可以随时间而改变,因为它只存在于customer表中,而代理键在其他任何地方都会使用。

相关问题