2015-04-08 77 views
1

我目前正在创建一个Web应用程序来管理我的股票投资组合,但是当涉及到事务表,我有一些问题,我想问一下。股票投资组合的数据库设计,支持股票拆分/合并

下面是我的股票的交易表的设计:

| column name |  datatype  | 
|----------------|----------------------| 
|  id  |  int(10)  | primary key, auto increment 
| portfolio_id |  int(10)  | reference to portfolio table primary key 
|  symbol |  varchar(20)  | stock symbol e.g: YHOO, GOOG 
|  type  | ENUM('buy','sell') | 
|  tx_date |   DATE   | 
|  price  |  DOUBLE(15,2)  | 
|  volume  |  int(20)  | 
| commission |  DOUBLE(15,2)  | 
| created_at |  TIMESTAMP  | 
| updated_at |  TIMESTAMP  | 

在我目前的设计中,我没有额外的表用于存储股票代码。我创建一个股票代码列表(使用一些股票API)供用户选择,当他们尝试创建新的交易记录时,我认为这种方法在股票分拆/合并时可能会导致一些问题,因为我可能不会能够使用相同的符号再次检索股票价格。

我想知道我应该怎么修改我的表,以支持股票拆分/合并案?

回答

0

美国有不到4000只股票。为什么不使用股票代码作为主键?你如何计划分红?

+0

因为我想支持那些在美国以外的股票。 即使我将符号设置为主键,关于股票拆分/合并的问题也无法修复。 对于股息部分,我想我会将其添加到投资组合的实现利润。但没有存储在事务表中 – Katrin

0

股票分割

... symbol type shares ... 
... AAPL split 100 ... 

2为1个的分流; 100股成为200股。

股息

symbol type amount 
AAPL div 20.00 

兼并

解决方法:记录合并为一个销售或老股票和新股票的买入。在'笔记'栏中添加适当的注释。

更准确的(但更复杂)的策略是重新设计整个数据库,使各行业实际上就是一个又一个交易的交易。 “买入”交易股票现金。 '卖'交易股票现金。合并交易股票A用于股票B.拆分交易100股的0股等。现金只是另一个资产类别。

外国股票

所有主要的财经网站有这个想通了。 symbol.exchange是一个唯一的ID。不需要重新发明轮子并创建一个新的ID列。

您还需要添加货币列外国股票。