考虑有一堆链接到“国家”或“货币”表的表。
为了使数据更易于阅读,我想在这两个表中的每个表中使用国家代码(例如美国、GB、AU)和货币代码(美元、澳元)创建 CHAR 字段作为主键,并且所有其他表将使用此 CHAR 作为外键。
数据库是带有innodb引擎的mysql。
它会导致性能问题吗?这是我应该避免的事情吗?
性能并不是真正的主要问题,至少对我来说不是。问题更多的是关于代理与自然键。
国家/地区代码不是静态的。他们可以而且确实会改变。国家更名(例如埃塞俄比亚改为厄立特里亚)。它们产生了(例如南斯拉夫或苏联的解体),也消失了(例如西德和东德)。当这种情况发生时,ISO 标准代码就会发生变化。
More in 1990 年以来的名称变更:国家、城市等
代理键往往更好,因为当这些事件发生时,键不会改变,只有引用表中的列会改变。
出于这个原因,我更倾向于使用 int 主键创建国家和货币表。
话虽这么说,varchar 键字段将使用更多空间并具有某些性能缺点,除非您执行大量查询,否则这些缺点可能不会成为问题。
为了完整起见,您可能需要参考应用程序开发人员犯的数据库开发错误.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)