2012-04-25 116 views
2

数据库有两个表格:一个用于股票(股票),另一个用于期权。这些是单独的表格,因为它们有不同的信息。例如,股票表具有股票代码栏和(主)交易栏;期权表中有一个股票代码栏,一个指向股票表的FK栏,一个执行价格栏,一个到期日期栏和一个右侧(投入/看涨)栏。我认为把它们分成两张表是一个好主意,尽管这是开放的讨论。数据库设计:股票和期权交易

我需要在数据库中存储交易(或订单或交易)。一笔交易就像“在2012年4月14日以200美元买入100股IBM”,一笔交易可以涉及股权或期权,交易应该存储为一张表格,其中一列指明交易是否涉及股票或一个选项,另一列是指向股票表或期权表的FK?或者应该有两个交易表,一个涉及股票交易,一个涉及期权交易?

稍后,我还需要添加头寸表,一个简单的头寸将由两笔交易组成,比如今天买入100股IBM,明天卖出100股IBM,但也可能更复杂,涉及期权和股票(例如,被保险的看涨期权),似乎如果我为两笔交易做交易,那么在设计头寸表时我会面临同样的困难,如果我实施了单一交易表e:我需要一个指向股票交易表或期权交易表的外键。

这让我觉得应该有一个单一的工具表,其中包含股票和期权。但是,股票所需的信息与期权差异很大(见第一段),这也是错误的。包含库存的行将使所有特定于选项的列为空。

我应该如何设计这个数据库?

+0

你介意发布SQL DDL和一些示例数据作为INSERT语句吗? – 2012-04-25 03:07:38

回答

3

您应该考虑制作新表STOCKOPTION的子类型:INSTRUMENT。当你交易或记录一个头寸时,这将是超级类型INSTRUMENT

这可让您为您的股票和期权保留不同的表格,这是明智的,因为它们具有不同的属性。同时,它可以让你用一组交易以合理的方式工作。

+0

你是对的,这听起来像一个有前途的方法。你会建议INSTRUMENT表和STOCK表之间的主键/外键关系如何?如果STOCK表有一个FK指向INSTRUMENT TABLE?或者INSTRUMENT表应该有一个指向STOCK表的FK?或两者? – Jimmy 2012-04-25 13:37:32

+1

@Jimmy - 我不会这样做 - 这是肯定的。通常你的子类型指向你的超类型。如果您在绿色领域建设,那么让INSTRUMENT定义主键,并将其用作每个子类型表中的主键。唯一性已经得到了保证。如果您的现有子类型表有可能冲突的键空间,那么您的选择是向与INSTRUMENT.ID(非常类似于绿色字段)相关的子类添加候选键,或者如果您无法触及现有的子类型表,请构建连接器表为每个超类型的子类型。 – 2012-04-25 19:20:56

+0

查询看起来像什么来显示事务?我不知道如何告诉查询从工具表映射到选项表或股票表? – Jimmy 2012-04-26 13:02:16