我目前正在开发一个存储和显示货币数据的网络服务。
我有两个 MySQL 表,CurrencyTable 和CurrencyValueTable。
货币表包含货币的名称及其描述等,如下所示:
CREATE TABLE CurrencyTable ( name VARCHAR(20), description TEXT, .... );
货币值表保存当天的货币值 - 市场开盘时每 2 分钟插入一个新值。表格如下所示:CREATE TABLE CurrencyValueTable ( currency_name VARCHAR(20), value FLOAT, 'datetime' DATETIME, ....);
我对这个设计有两个问题:
SELECT value FROM CurrencyValueTable ORDER BY 'datetime' DESC LIMIT 1
对于您的问题:
我会用一张桌子。特别是如果您需要报告或比较多种货币的数据,那么通过坚持一张表将会得到难以置信的改善。
如果您不需要跟踪每种货币价值的历史记录,那么只需更新单个值即可 - 但在这种情况下,为什么还要有一个单独的表呢?您只需将“最新值”添加为货币表中的字段并在那里更新即可。如果您确实需要跟踪历史记录,那么您将需要这两个表,并且您发布的 SQL 将起作用。
顺便说一句,我会使用 DECIMAL(10,2) 而不是 FLOAT。在 MySQL 5.0 之后,当涉及到舍入的货币处理时,这实际上会改善结果。
由于您的网络服务是事务性的,因此如果您必须同时访问更少的表,那就更好了。由于您会大量阅读和写作,因此我建议使用一张桌子。
最好在CurrencyTable中插入一个字段并更新它,而不是一次请求同时访问两个表。