货币“类型”列的数据类型,例如美元、猫等。

Use*_*841 6 mysql database-design

我正在为会计软件设置 MySQL 数据库。其中一个字段是保存每笔交易使用的货币。您会推荐哪种字段类型?细节:

  • 不会使用超过 10 种不同的货币
  • 所有货币都有三个字母的 ISO 名称
  • 货币列有时会用在 CASE 语句中,有时会用在 WHERE 语句中
  • 桌子会很大,所以我想做出最佳选择。存储大小不是问题。速度和在较小程度上的易用性是。

我正在考虑:

  1. 使用char (3)领域和保存货币usdcad等等。
  2. 使用enum字段并将 10 种货币定义为选项
  3. 使用一个tinyint字段并将其与另一个包含每种货币的 iso 代码的数据库相关联。
  4. 使用 tinyint字段而不是关联数据库(并且必须执行 JOIN),我只是将非常静态且不变的货币列表保存在 PHP 数组中。为我节省了一些 JOINing,但仍然允许我使用tinyint.

有人对什么是最好的有任何建议吗?

Con*_*lls 8

3 个字母的 ISO 货币代码相对较小,因此将它们用作参考表的键几乎没有开销。将某些项目(例如日期、总帐代码和其他分析代码和货币代码)直接放在表格上对于报告交易和余额的人员来说非常方便。出于这个原因,许多会计包 - 甚至像甲骨文财务这样的大公司 - 都是这样做的。


gbn*_*gbn 6

char(3) 是自然键

它足够短,以至于不使用它(添加代理键并在整个过程中使用连接)会增加更多的开销,然后每行比 tinyint 多出 2 个字节。

重新措辞,不使用它会增加不必要的不​​透明性和代码复杂性。

从经验来看,即使有 40k 写入/秒和数十亿行,它也更容易使用 (3)。