3

複数の市場で取引されている証券の価格を格納するために、SQL Server 2008を使用してデータベースを構築しています。

特定の市場では、すべての証券に同じ休日カレンダーがあります。ただし、休日のカレンダーは市場によって異なります。

次の 4 つのテーブルが必要です: MarketGoodBusinessDaySecurity、およびSecurityPriceHistoryであり、証券が取引された市場が閉鎖された営業日の行がSecurityPriceHistoryにないように強制したいと考えています。

テーブル内のフィールドは次のとおりです。

市場: MarketID (PK)、MarketName

GoodBusinessDay: MarketID (FK)、SettlementDate (ペアは PK)

セキュリティ: SecurityID (PK)、MarketID (FK)、SecurityName

SecurityPriceHistory: これが質問です - 私の好みは SecurityID、SettlementDate、SecurityPrice です

このようにテーブルを定義し、SecurityPriceHistoryのすべての行に対応する行がGoodBusinessDayにあることを保証するにはどうすればよいでしょうか?

MarketIDの列をSecurityPriceHistoryに追加したとします。2 つの外部キー (1 つはSecurityを指し、もう 1 つはGoodBusinessDayを指す) を使用してこれを行う方法はわかりましたが、それは正しい方法ではないようです。

4

3 に答える 3

1

このモデルで十分です。MarketとBusinessDayの関係は、識別しています。つまり、営業日は、それが属する市場のコンテキスト外には存在しません。

同様に、BusinessDayとSecurityPriceHistoryの関係は、SecurityとSecurityPriceHistoryの関係であるため、識別されています。

これは、SecurityPriceHistoryの主キーが複合であるということを意味します:security_id、market_idおよびsettlement_date。

1を取る

これにより、特定の市場/営業日のSecurityPriceHistoryに各セキュリティの行が1つしか含まれないという制約が適用されます。ただし、特定の市場との証券の関係にもかかわらず、同じ証券を複数の市場で取引することは可能です。それを制限するには、市場と証券の関係を特定する必要があります。

2を取る

于 2011-05-19T17:38:31.423 に答える
0

SecurityPriceHistoryGoodBusinessDayに FK があり、FK が にない可能性がありMarketます。テーブルに参加することで、市場を把握できGoodBusinessDayます。このオプションはあまり好きではありませんが、可能性はあります。

トリガーを使用して、挿入/更新時に適切な GoodBusinessDay レコードがあることを確認して確認することもできます。そうでない場合は、トランザクションを拒否します。

于 2011-05-19T17:16:12.900 に答える
0

同じ securityID が同じ goodBusinessDay に異なる市場で販売される可能性があると仮定すると、securityPriceHistory テーブルに marketID フィールドが必要になると思います。

思い通りに設定すればOKです。親、関連する 2 人の子供、そして両方の子供と関係を持つ孫がいます。


証券を 1 つの市場でしか販売できない場合でも、2 つの複合 FK、MarketDay と MarketSecurity を使用して、securityPriceHistory テーブルに marketID を含めます。そのように明確に、IMO。

于 2011-05-19T17:22:04.433 に答える