sql – 是否使用char作为主键/外键?否否?

前端之家收集整理的这篇文章主要介绍了sql – 是否使用char作为主键/外键?否否?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑到有一堆表链接到“国家”或“货币”表.

为了使数据更易于阅读,我希望将CHAR字段与国家代码(例如,US,GB,AU)和货币代码(USD,AUD)作为这两个表中的每一个的主键,所有其他表将使用此CHAR作为一个原始钥匙

数据库是具有innodb引擎的mysql.

是否会导致性能问题?这是我应该避免的东西吗?

解决方法

表现不是真正的主要问题,至少不适合我.问题更多是关于代理与自然键的关系.

国家代码不是静态的.他们可以而且做改变.国家改名(例如埃塞俄比亚到厄立特里亚).它们形成(例如南斯拉夫或苏联解体),它们不再存在(例如西德和东德).当这种情况发生时,ISO标准代码更改.

更多在Name Changes Since 1990: Countries,Cities,and More

代理键往往更好,因为当这些事件发生时,键不会更改,只有参考表中的列.

因此,我更倾向于使用int主键创建国家和货币表.

话虽如此,varchar关键字段将使用更多的空间并具有一定的性能缺点,除非您执行大量的查询,否则这些缺点可能不会是一个问题.

为了完整,您可能需要参考Database Development Mistakes Made by AppDevelopers.

猜你在找的MsSQL相关文章