mysql - 银行数据库中的“客户ID”可以有什么样的数据类型?INT 还是 VARCHAR?
问题描述
银行数据库中的“客户ID”可以有什么样的数据类型?INT 还是 VARCHAR?
考虑到另一个具有“所有者”属性的表是“客户 ID”的外键
解决方案
数据库通常有两个用于现实生活实体的唯一标识符。
- 自然钥匙
- 代理键
在您的情况下,自然键可能是与客户可能在银行对帐单上看到的内容相对应的字符串(varchar) 。可能包括他们的部分姓名和/或出生日期。
然后,代理键通常是由数据库创建的唯一 Integer,仅用于唯一标识数据库内的客户。因为那个代理键更小(通常是 4 个字节而不是几十个字节),它在外键和索引中的使用使用更少的磁盘空间、内存、io 等,因此通常会使数据库更紧凑,运行更流畅/更快。
这种自然/代理键组合允许代理键只完成唯一标识行(客户)的角色,并且永远不会改变。因为,如果它更改,从其他表(外键)引用它的所有行也需要更改。自然键可以随时间变化,因为它只存在于客户表中,而代理键在其他任何地方都可以使用。
推荐阅读
- mongodb - MongoDBContainer 未启动 Spring Boot 集成测试
- c++ - 类构造函数行为奇怪
- postgresql - 为什么关于 postgresql 计量化视图的这两种情况之间的成本时间不同?
- jira - 我无法再从 Crashlytics 打开 jira 错误
- python - 根据数据框 Python 中两列的条件在 matplotlib 中绘制多个图?
- java - 从字符串中获取令牌流的首选方法是什么?
- java - 从 Jenkins 插件调用 API 时获取“java.net.SocketException: Connection reset with (SSL- Self Signed Certificate)”
- javascript - VSCode 不显示从另一个文件导入的代码助手
- mapbox - 使用 Mapbox 捕捉到道路
- json - 当字段名称“cmis:object”以json格式出现时如何编写groovy脚本