簡體   English   中英

三向參照完整性 - SQL Server 2008

[英]Three-way Referential Integrity - SQL Server 2008

我正在使用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 我可以看到我如何使用兩個外鍵(一個指向安全和一個指向GoodBusinessDay ),但這似乎不是正確的方法。

這個模型應該做。 Market和BusinessDay之間的關系是識別 ,即商業日不屬於它所屬的市場環境。

同樣,BusinessDay和SecurityPriceHistory之間的關系正在識別Security和SecurityPriceHistory之間的關系。

這意味着SecurityPriceHistory的主鍵是composite:security_id,market_id和settlement_date。

拿1

這將強制執行約束,即對於給定的市場/營業日,每個安全性在SecurityPriceHistory中可能不超過一行。 然而,盡管安全性與特定市場的關系,它確實允許在多個市場中進行相同的證券交易:為了限制這一點,市場和證券之間的關系需要識別,因此:

拿2

SecurityPriceHistory可能有一個FK到GoodBusinessDay和沒有FK到Market 您可以通過加入GoodBusinessDay表來弄清楚市場。 我真的不喜歡這個選項,但這是一種可能性。

您還可以使用觸發器檢查並確保插入/更新時存在正確的GoodBusinessDay記錄,否則拒絕該事務。

我認為你需要securityPriceHistory表中的marketID字段,假設同一goodBusinessDay可以在不同的市場上銷售相同的securityID。

按照你想的方式設置它很好。 你有一個父母,兩個相關的孩子,然后是一個與兩個孩子有關系的孫子。


即使證券只能在一個市場上出售,我仍然會在securityPriceHistory表中包含marketID,其中包含兩個復合FK,MarketDay和MarketSecurity。 這樣清楚,IMO。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM