考虑到有一堆表链接到“国家”或“货币”表.
为了使数据更易于阅读,我希望将CHAR字段与国家代码(例如,US,GB,AU)和货币代码(USD,AUD)作为这两个表中的每一个的主键,所有其他表将使用此CHAR作为一个原始钥匙
是否会导致性能问题?这是我应该避免的东西吗?
解决方法
表现不是真正的主要问题,至少不适合我.问题更多是关于代理与自然键的关系.
国家代码不是静态的.他们可以而且做改变.国家改名(例如埃塞俄比亚到厄立特里亚).它们形成(例如南斯拉夫或苏联解体),它们不再存在(例如西德和东德).当这种情况发生时,ISO标准代码更改.
更多在Name Changes Since 1990: Countries,Cities,and More
代理键往往更好,因为当这些事件发生时,键不会更改,只有参考表中的列.
因此,我更倾向于使用int主键创建国家和货币表.
话虽如此,varchar关键字段将使用更多的空间并具有一定的性能缺点,除非您执行大量的查询,否则这些缺点可能不会是一个问题.
为了完整,您可能需要参考Database Development Mistakes Made by AppDevelopers.