2012-04-25 88 views
2

數據庫有兩個表格:一個用於股票(股票),另一個用於期權。這些是單獨的表格,因爲它們有不同的信息。例如,股票表具有股票代碼欄和(主)交易欄;期權表中有一個股票代碼欄,一個指向股票表的FK欄,一個執行價格欄,一個到期日期欄和一個右側(投入/看漲)欄。我認爲把它們分成兩張表是一個好主意,儘管這是開放的討論。數據庫設計:股票和期權交易

我需要在數據庫中存儲交易(或訂單或交易)。一筆交易就像「在2012年4月14日以200美元買入100股IBM」,一筆交易可以涉及股權或期權,交易應該存儲爲一張表格,其中一列指明交易是否涉及股票或一個選項,另一列是指向股票表或期權表的FK?或者應該有兩個交易表,一個涉及股票交易,一個涉及期權交易?

稍後,我還需要添加頭寸表,一個簡單的頭寸將由兩筆交易組成,比如今天買入100股IBM,明天賣出100股IBM,但也可能更復雜,涉及期權和股票(例如,被保險的看漲期權),似乎如果我爲兩筆交易做交易,那麼在設計頭寸表時我會面臨同樣的困難,如果我實施了單一交易表e:我需要一個指向股票交易表或期權交易表的外鍵。

這讓我覺得應該有一個單一的工具表,其中包含股票和期權。但是,股票所需的信息與期權差異很大(見第一段),這也是錯誤的。包含庫存的行將使所有特定於選項的列爲空。

我應該如何設計這個數據庫?

+0

你介意發佈SQL DDL和一些示例數據作爲INSERT語句嗎? – 2012-04-25 03:07:38

回答

3

您應該考慮製作新表STOCKOPTION的子類型:INSTRUMENT。當你交易或記錄一個頭寸時,這將是超級類型INSTRUMENT

這可讓您爲您的股票和期權保留不同的表格,這是明智的,因爲它們具有不同的屬性。同時,它可以讓你用一組交易以合理的方式工作。

+0

你是對的,這聽起來像一個有前途的方法。你會建議INSTRUMENT表和STOCK表之間的主鍵/外鍵關係如何?如果STOCK表有一個FK指向INSTRUMENT TABLE?或者INSTRUMENT表應該有一個指向STOCK表的FK?或兩者? – Jimmy 2012-04-25 13:37:32

+1

@Jimmy - 我不會這樣做 - 這是肯定的。通常你的子類型指向你的超類型。如果您在綠色領域建設,那麼讓INSTRUMENT定義主鍵,並將其用作每個子類型表中的主鍵。唯一性已經得到了保證。如果您的現有子類型表有可能衝突的鍵空間,那麼您的選擇是向與INSTRUMENT.ID(非常類似於綠色字段)相關的子類添加候選鍵,或者如果您無法觸及現有的子類型表,請構建連接器表爲每個超類型的子類型。 – 2012-04-25 19:20:56

+0

查詢看起來像什麼來顯示事務?我不知道如何告訴查詢從工具表映射到選項表或股票表? – Jimmy 2012-04-26 13:02:16

相關問題