首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >历史期权数据Db设计(~200 Db)

历史期权数据Db设计(~200 Db)
EN

Database Administration用户
提问于 2013-04-13 21:15:04
回答 1查看 2.7K关注 0票数 3

我需要一些帮助来决定如何最好地设计我的桌子。我有大约200 in的数据,我希望放在一个表(历史期权价格数据)。这张桌子看起来像:

代码语言:javascript
复制
String symbol
Date date
Date exp;
double strike;
double ask;
double bid;
<20 other columns>

95%的时间我将获取当前日期的数据。但其他5%的时间我想分析历史数据。

大多数查询都涉及符号/日期/exp的某种组合。

就效率而言,我不知道如何最好地安排这张桌子/S。是否最好将数据放入两个表:历史表和当前表?或者是日期索引?或者可能是额外的布尔列(isCurrent),它指示哪些数据是当前的还是非当前的?

如果有关系,我会在封面下使用java/hibernate/mysql。

谢谢

EN

回答 1

Database Administration用户

回答已采纳

发布于 2013-04-14 12:27:45

最好的第一个策略是始终将事务数据放在一个规范化的数据存储区中。这将数据完整性问题的风险降到最低,并使您必须编写的代码量降到最低。

通常,人们会发现,人们对绩效有某种关注。这导致他们考虑去正规化。最好是等到您的卷测试证明性能存在真正的问题,而不是假设会出现问题,因为您的表“很大”。

考虑到您有大量的历史数据,而您大多数时间都不使用,那么您可能会从去规范化中受益。不过,在假设是这样之前,您确实应该对此进行测试。如果是这种情况,那么一种可能对您有用的方法是保留两个数据存储:(a)保存当前值的数据存储;(b)保存所有值,包括当前和历史值的方法。

如果这样做有意义(出于性能原因),您应该构建一些自动化来跟踪当前数据的所有更改,并将它们记录在历史记录表中。这最好在DBMS中使用支持触发器的触发器来完成。

几乎从未有意义的是将当前的价值观保留在一个地方,而将历史价值(不包括当前的价值)保留在另一个地方。我从来没有遇到过这样的情况,您只需要查询历史记录,不包括当前值。这意味着,如果以这种方式分隔当前+历史值,则查询必须是当前+历史值的两倍。

这就是我要向你推荐的:

  • 如果可以的话,将数据保存在一个地方(绝对是在日期索引)
  • 如果有必要的话,请将当前值保存在历史表中。
  • 不要对"is_current“使用位标志。这几乎从来没有很好的索引。
票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/39919

复制
相关文章

相似问题

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