Ale*_*ski 9 mysql sql database-design innodb data-modeling
考虑到有一堆表链接到"国家"或"货币"表.
为了使数据更容易阅读,我想使用国家代码(例如US,GB,AU)和货币代码(USD,AUD)的CHAR字段作为这两个表中每个表的主键,所有其他表将使用此CHAR作为一个外键.
数据库是带有innodb引擎的mysql.
是否会导致性能问题?这是我应该避免的吗?
cle*_*tus 21
性能不是主要问题,至少对我来说不是.问题更多的是代理与自然键.
国家/地区代码不是静态的 他们可以而且确实会改变.国家改名(例如埃塞俄比亚到厄立特里亚).它们应运而生(例如南斯拉夫或苏联解体)并且它们不复存在(例如西德和东德).发生这种情况时,ISO标准代码会更改.
代理键往往更好,因为当这些事件发生时,键不会改变,只有参考表中的列才会改变.
出于这个原因,我更倾向于使用int主键创建国家/地区和货币表.
话虽这么说,varchar关键字段将使用更多空间并具有某些性能缺点,除非您执行大量查询,否则这些缺点可能不会成为问题.
为了完整起见,您可能需要参考AppDevelopers制作的数据库开发错误.