首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL数据库设计问题

MySQL数据库设计问题
EN

Stack Overflow用户
提问于 2011-04-13 11:36:05
回答 3查看 510关注 0票数 0

我目前正在开发一个存储和显示货币数据的web服务。我有两个MySQL表,CurrencyTable和CurrencyValueTable。

CurrencyTable保存货币的名称以及它们的描述等,如下所示:

CREATE TABLE CurrencyTable ( name VARCHAR(20), description TEXT, .... ); CurrencyValueTable在一天中保存货币的价值-当市场开盘时,每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

第二种选择似乎更慢..我倾向于第一个(也更容易实现)。

任何意见都将非常感谢!

附注:-请忽略SQL语法/其他错误,这是我胡乱键入的。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-13 11:48:30

回答您的问题:

  1. 我会用一张桌子。尤其是如果您需要报告或比较来自多个货币的数据,那么坚持使用一个表将会极大地改善性能。
  2. 如果您不需要跟踪每种货币的值的历史记录,那么可以继续,只更新单个值--但是在这种情况下,为什么还要有一个单独的表呢?您只需将“最新值”作为字段添加到currency表中并在那里进行更新即可。如果您确实需要跟踪历史记录,那么您将需要这两个表,并且您发布的SQL将会起作用。

另外,我将使用DECIMAL(10,2)而不是浮点数。在MySQL 5.0之后,当涉及到四舍五入的货币处理时,这实际上会有更好的结果。

票数 2
EN

Stack Overflow用户

发布于 2011-04-13 11:41:06

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

Stack Overflow用户

发布于 2011-04-13 11:47:14

  1. 由于您的the服务是事务性的,因此如果您必须同时访问较少的表,效果会更好。由于您将读取和写入大量内容,因此我建议使用单个表。
  2. 最好在CurrencyTable中插入一个字段并对其进行更新,而不是一次请求访问两个表。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5644120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档