MySQL 数据库设计问题

问题描述 投票:0回答:3

我目前正在开发一个存储和显示货币数据的网络服务。 我有两个 MySQL 表,CurrencyTable 和CurrencyValueTable。
货币表包含货币的名称及其描述等,如下所示:

CREATE TABLE CurrencyTable ( name VARCHAR(20), description TEXT, .... );
货币值表保存当天的货币值 - 市场开盘时每 2 分钟插入一个新值。表格如下所示:
CREATE TABLE CurrencyValueTable ( currency_name VARCHAR(20), value FLOAT, 'datetime' DATETIME, ....); 

我对这个设计有两个问题:

  1. 我有超过200种货币。为每种货币建立一个单独的CurrencyValueTable 更好还是将它们全部保存在一个表中更好?
  2. 我需要能够显示货币的当前(最新)价值。是否最好将这样的字段插入到CurrencyTable中并每两分钟更新一次,或者最好使用如下语句:
    SELECT value FROM CurrencyValueTable ORDER BY 'datetime' DESC LIMIT 1

    第二个选项似乎较慢..我倾向于第一个(这也更容易实现)。
mysql database-design
3个回答
2
投票

对于您的问题:

  1. 我会用一张桌子。特别是如果您需要报告或比较多种货币的数据,那么通过坚持一张表将会得到难以置信的改善。

  2. 如果您不需要跟踪每种货币价值的历史记录,那么只需更新单个值即可 - 但在这种情况下,为什么还要有一个单独的表呢?您只需将“最新值”添加为货币表中的字段并在那里更新即可。如果您确实需要跟踪历史记录,那么您将需要这两个表,并且您发布的 SQL 将起作用。

顺便说一句,我会使用 DECIMAL(10,2) 而不是 FLOAT。在 MySQL 5.0 之后,当涉及到舍入的货币处理时,这实际上会改善结果。


1
投票
  1. 最好一张桌子容纳所有货币
  2. 如果需要历史价格,那么表需要保存它们。在许多情况下,合理的折衷方案是将价格表拆分为完整的历史价格列表和另一个仅包含当前价格的表。
  3. 使用 float 数据类型可能会很麻烦。请确保您知道自己在做什么。如果没有,请使用数据库货币数据类型。

1
投票
  1. 由于您的网络服务是事务性的,因此如果您必须同时访问更少的表,那就更好了。由于您会大量阅读和写作,因此我建议使用一张桌子。

  2. 最好在CurrencyTable中插入一个字段并更新它,而不是一次请求同时访问两个表。

© www.soinside.com 2019 - 2024. All rights reserved.