我想设计一个金融工具条款和条件数据库,可以看到2个可能的解决方案。首先是我所说的最小的设计,我认为它具有最大的灵活性。第二种方法是将具有级联更新系统的主数据库放入存储每种不同安全类型的更精细细节的子表中。最好的金融工具条款和条件数据库设计(最小或复杂)
举一个例子来说明这些概念。对于最小的设计,我认为只需要4列。此表我看到的是最多才多艺的衍生金融工具,应该很容易通过包括被纳入新的AttibuteName的
UpdateDate SecurityID AttributeName AttributeValue
----------------- ----------- --------------- ---------------
09/12/2011 18:01 1 Name HSBC Plc
09/12/2011 18:01 1 Ticker HSBA LN Equity
09/12/2011 18:01 1 SecurityType Equity
09/12/2011 18:01 1 Currency GBP
09/12/2011 18:01 1 Country UK
11/12/2011 12:23 2 Name RBS 6% 15-Mar-2015
11/12/2011 12:23 2 Ticker XS000000Corp
11/12/2011 12:23 2 SecurityType Bond
11/12/2011 12:23 2 Currency EUR
11/12/2011 12:23 2 Country UK
11/12/2011 12:23 2 Coupon 6%
11/12/2011 12:23 2 Maturity 15-Mar-15
11/12/2011 12:23 2 CouponFreq 2
虽然大多数金融工具不改变它们的性质,这种方法确实允许有障碍触发对奇异衍生品可以很容易地改变,因为当触发事件改变安全特征时,可以在稍后的日期更改SecurityType。此方法还保留了保留的证券持有者的“旧”特征(UpdateDate定义了证券持有人细节更改的生效日期)。唯一的问题是需要构建一个Pivot Type Query,然后将不同的AttributeNames转换为新的Pivot Table的列名称。 (我不确定正确的术语是什么,但让我们称之为膨胀数据)。
这是我如何看第二个解决方案的一瞥。
Name Ticker SecurityType SecurityID Currency Country
--------- --------------- ------------ ---------- -------- -------
HSBC Plc HSBA LN Equity Equity 1 GBP UK
哪里的AttributeName的通用于所有证券(姓名,股票代码,货币),这些列将被存储在一个SecurityMaster表。当仪器有“perculiarities”,会有一个级联更新子表,其中的具体合同的细节将举行(例如SecurityBond,SecurityEquityFuture,SecurityEquityOption,SecurityInterestRateFuture,...)
希望你能看到2个范式。第一张桌子非常小巧,容易安装。 1的唯一问题是需要构建Dynamic Pivot表代码,该代码实质上构建了将在范例2下创建的单个SecurityType表。
任何评论/指针都会受到欢迎,并且如果有任何不明(或者我没有使用过正式的DB术语)。特别是如果某人有Pivot代码从范例1到范例2。
非常感谢和亲切的问候, Bertie p.s.经验:使用Sql Server Express 2-3个月(在没有软件工程师的公司中)。
有一个alterantive - 你认为使用XML字段存储XML某些领域? ;)你可以拥有不同的模式并扩展它们,其中qerying比EAV模型更快。 – TomTom 2011-12-19 19:20:56
我不会将此作为答案发布,因为上下文似乎明确限于SQL Server(并且我已经提出了其中一个答案),但您是否承诺使用关系存储?关系存储这些数据的困难在于关系(表格)本身很难定义,很大并且经常变化(新的工具类型)。调查NoSQL替代品可能更有意义,例如RavenDB,MongoDB。请参阅http://martinfowler.com/bliki/DatabaseThaw.html获取一些高层次的动机。 – 2011-12-20 07:51:07