【问题标题】:database design: stock & option trades数据库设计:股票和期权交易
【发布时间】:2012-04-25 02:51:28
【问题描述】:

一个数据库有两张表:一张用于股票(股票),一张用于期权。这些是单独的表,因为它们具有不同的信息。例如,stocks 表有一个股票代码列和一个(主要)交易所列;期权表有一个股票代码列、一个指向股票表的 FK 列、一个执行价格列、一个到期日列和一个右(看跌/看涨)列。我认为将它们分成两张表是个好主意,尽管这有待商榷。

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

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

这让我觉得应该有一个单一的工具表,其中包含股票和期权。然而,股票所需的信息与期权(见第一段)如此不同,这也让人感觉不对。包含股票的行将所有特定于期权的列都为空。

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

【问题讨论】:

  • 您介意将 SQL DDL 和一些示例数据作为 INSERT 语句发布吗?

标签: database-design options stocks trading


【解决方案1】:

您可能应该考虑将STOCKs 和OPTIONs 设为新表的子类型:INSTRUMENT。当您交易或记录头寸时,它将与超类型 INSTRUMENT 相关。

这使您可以为股票和期权保留不同的表格,这是明智的,因为它们具有不同的属性。同时,它可以让您以合理的方式处理一组事务。

【讨论】:

  • 你是对的,这听起来像是一个很有前途的方法。你会建议什么是 INSTRUMENT 表和(比如说)STOCK 表之间的主键/外键关系? STOCK 表是否应该有一个指向 INSTRUMENT TABLE 的 FK?或者 INSTRUMENT 表是否应该有一个指向 STOCK 表的 FK?还是两者兼而有之?
  • @Jimmy - 我不会两者都做 - 这是肯定的。通常,您的子类型指向您的超类型。如果您在绿色字段中构建,那么让 INSTRUMENT 定义主键并将其用作每个子类型表中的主键。这种方式已经保证了唯一性。如果您的现有子类型表可能存在键空间冲突,那么您的选择是将候选键添加到与 INSTRUMENT.ID 相关的子类型(非常类似于绿色字段),或者如果您无法触及现有子类型表,则构建连接器表为您的超类型的每个子类型。
  • 查询如何显示交易?我不知道如何告诉查询从工具表映射到期权表或股票表?
  • @Jimmy - 典型的方法是创建超类型和所有子类型的视图。该视图是使用对每个子类型的一个查询构建的,使用 UNION ALL 将它们收集起来。这仅在您能够提出一组通用列的情况下才有效。有时视图包含来自每个子类型的所有唯一列。这会导致视图中出现“稀疏列”——但是在视图中,稀疏列就像大多数人通常认为的那样邪恶。您的查询只是从事务表连接到 INSTRUMENT 等视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2014-02-11
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
相关资源
最近更新 更多