3

我正在使用SQL Server 2008构建一个数据库来存储在多个市场上交易的证券价格。

对于给定的市场,所有证券都有相同的假期日历。但是,假期日历因市场而异。

我想要以下四个表:MarketGoodBusinessDaySecuritySecurityPriceHistory,并且我想强制SecurityPriceHistory在交易证券的市场关闭时没有工作日的行。

表中的字段如下:

市场:MarketID (PK)、MarketName

GoodBusinessDay: MarketID (FK), SettlementDate (这对是PK)

安全性:SecurityID (PK)、MarketID (FK)、SecurityName

SecurityPriceHistory:这是个问题 - 我的偏好是 SecurityID、SettlementDate、SecurityPrice

如何以这种方式定义表并保证SecurityPriceHistory中的每一行, GoodBusinessDay中都有相应的行?

如果我将MarketID列添加到SecurityPriceHistory。我可以看到如何使用两个外键(一个指向Security,一个指向GoodBusinessDay)来执行此操作,但这似乎不是正确的方法。

4

3 回答 3

1

这个模型应该可以。Market 和 BusinessDay 之间的关系是确定性的,也就是说,一个工作日在它所属的市场范围之外不存在。

同样,BusinessDay 和 SecurityPriceHistory 之间的关系正在识别,因为它是 Security 和 SecurityPriceHistory 之间的关系。

这意味着SecurityPriceHistory 的主键是复合的:security_id、market_id 和settlement_date。

拿 1

这将强制每个证券在给定市场/营业日的 SecurityPriceHistory 中的行数不得超过一行。然而,它确实允许同一证券在多个市场上交易,尽管证券与特定市场有关系:为了限制这一点,需要确定市场和证券之间的关系,因此:

拿 2

于 2011-05-19T17:38:31.423 回答
0

SecurityPriceHistory可以有 FK toGoodBusinessDay和 NO FK to Market。您可以通过加入GoodBusinessDay表来了解市场。我不太喜欢这个选项,但这是一种可能。

您还可以使用触发器检查并确保插入/更新时有正确的 GoodBusinessDay 记录,否则拒绝交易。

于 2011-05-19T17:16:12.900 回答
0

我认为您将需要securityPriceHistory 表中的marketID 字段,假设相同的securityID 可以在同一个goodBusinessDay 的不同市场上出售。

按照自己的想法设置就好了。您有一个父母,两个相关的孩子,然后是一个与两个孩子都有关系的孙子。


即使证券只能在一个市场上出售,我仍然会在 securityPriceHistory 表中包含 marketID,其中包含两个复合 FK,MarketDay 和 MarketSecurity。那样更清楚,IMO。

于 2011-05-19T17:22:04.433 回答