id, trade_date, stock_code, open, high, low, close, volume
其中 id 主键,自增。 通过 trade_date 和 stock_code 可以唯一确定一行。
目前觉得不合理的地方:
1. id 目前没有用处,目前查询都是通过查询一段时间范围内, 一些股票的数据。
2. 重复过多,每天大约有 2000+个股票数据, 这样 trade_date 就要重复 2000+次。
3. 和其他表合并不方便。目前合并的时候,都是通过 trade_date 和 stock_code 来判断唯一性。
这两个字段都要在其他表中存储。
date 只有四种可能: XXXX-03-31, XXXX-06-30, XXXX-09-30, XXXX-12-31. (但是这些日期不一定是 trade_date.) 分别表示第 1,2,3,4 季度数据。由于数据发布的滞后性, 我需要对于日度数据: 1 、 2 、 3 月底采用上一年 Q3 的数据; 4 、 5 、 6 、 7 月底用本年 Q1 的数据; 8 、 9 月底用本年 Q2 的数据; 10 、 11 、 12 用本年 Q3 的数据。
还有一些表, 也是日度数据, 有 id, trade_date, stock_code, col1, col2, col3 , ...... 同样的 id 自增;主键。 同样是 trade_date, stock_code 唯一的确定一行数据。
这张表和 OHLCV 合并时,就是靠 trade_date, stock_code 来和 OHLCV 的相应的行来对应。
我觉得应该有更好的方法。
先行谢过了。
1
b821025551b 2016-07-11 16:56:57 +08:00
1.id 无论是否有用都要留;
2.trade_data 提出一个单独表, OHLCV 里的 trade_date 存新表的 id ; 3.trade_date 和 stock_code 可以判断唯一性,那么是否对于 id 也是唯一的,是否可以直接用“没有用处”的 id 。 |
2
billgreen1 OP @b821025551b id 是自增主键,当然也是唯一的。
假设 OHLCV 是价格表(表名称 price), 日度数据。表里现存 id, trade_date_id, stock_id, open, high, low, close, volume 等。由于其 id 是自增的,当日也能唯一确定一条数据。 另有日度因子表(表名称 factors.) 日度数据。 表里也要存 id, trade_date_id, stock_id, fac1, fac2, fac3, .... 我要将这两个表合并的时候,还是得设置 where price.trade_date_id = factors.trade_date_id and price.stock_id = factors.stock_id. 主要问题是很多表中都有相同的两列(trade_date/stock_code) 或者 ( trade_date_id/stock_code_id) |
3
billgreen1 OP @b821025551b 很多时候,两张表没有“关系”, 唯一联系就是通过(trade_date_id, stock_code_id)配对。
|
4
leedstyh 2016-07-11 17:40:41 +08:00 via Android
ID 没用,取消吧,不要纠结 date 和 code 的重复,股票数据天然的 key 就是 ticker+timestamp ,你 factor 的表我猜是每天的 TA 数据吧,和 ohlcv 存成一张表呢? fundamental 数据存另外一张表怎么样
事实上我是用 kv 数据库来存股票数据的 |
5
billgreen1 OP @leedstyh 你说的对,是每天的 TA 数据。 问题是太多了,放到一张表里有点太吓人。现在是想着按类别存放,比如动量类,波动类,等。另外还有每日的估值类因子。
|
6
fcicq 2016-07-11 20:28:47 +08:00
楼主没钱上商用列存啊
|
7
billgreen1 OP @fcicq 可以详细说说嘛?不了解商用列存是什么
|
8
fcicq 2016-07-11 23:31:14 +08:00
@billgreen1 因为回复的时候没仔细看节点. MySQL 没有列存引擎. 重复 2000 次对于列存来说没什么特别的.
|
9
8bit 2016-07-11 23:39:45 +08:00 via Android
股票 id ,名称之类都可以抽出来,行情这种单独一张表出来,楼主设计的时候要估算下总体数据量
|
10
8bit 2016-07-11 23:42:13 +08:00 via Android
日期可以单独来张表,应付查询。一些区间行情可以计算的
|
11
billgreen1 OP @8bit 我目前在这样考虑呢,谢谢啦。
股票代码一张表: stock id, stock_code 交易日期一张表: trade_date id, trade_date price 表 设置两个外键约束(stock_code_id, trade_date_id) id, stock_code_id, trade_date_id, open, high, low, close, volume 这样就是需要 join stock , trade_date 两个表 |
12
8bit 2016-07-12 08:13:12 +08:00 via Android
@billgreen1 日期就冗余行情里面,没必要提出来
|
13
realpg 2016-07-12 08:56:06 +08:00 1
@billgreen1
关键表全部数字化 该有的冗余都应该有 很多看起来不该有的冗余在统计时如果避免两个巨大的表 join ,都应该设计 估计好数据量,每个查询的预计检索数据量,查询品读,超过一定范围,就要考虑检索时间了 另外,总在用的数据表,基础数据表,能数字就数字型,省空间,检索快 |
14
xchange 2016-07-12 18:03:00 +08:00 1
国内几个大的公司内部的行情表里 trade date 都是冗余的;股票的代码、名称、缩写等信息等等都是做一张单独的证券代码表,每个股票有一个内部代码,通过内部代码和其他表关联。
|