使用char作为主键/外键是不是没有?

Ale*_*ski 9 mysql sql database-design innodb data-modeling

考虑到有一堆表链接到"国家"或"货币"表.

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

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

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

cle*_*tus 21

性能不是主要问题,至少对我来说不是.问题更多的是代理与自然键.

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

更多自1990年以来的名称变化:国家,城市等

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

出于这个原因,我更倾向于使用int主键创建国家/地区和货币表.

话虽这么说,varchar关键字段将使用更多空间并具有某些性能缺点,除非您执行大量查询,否则这些缺点可能不会成为问题.

为了完整起见,您可能需要参考AppDevelopers制作的数据库开发错误.

  • 埃塞俄比亚改名了吗?!? (4认同)
  • 阿比西尼亚成为埃塞俄比亚; 厄立特里亚与埃塞俄比亚分道扬and,现在是一个独立的国家. (4认同)