2012-04-23 72 views
1

一個簡單的股權數據庫有3個表:一個代碼表,交換表和貨幣表。 的股票表有兩列:符號列(例如:IBM)和外鍵的行中的交換表。 交換表有兩列:一列名(例如:NYSE)和外鍵的行中的貨幣表。 貨幣表有一列:一個符號(例如:美元)。 (我省略了每個表的主鍵列)。MySql的多表約束

如何強制約束,不應該是相同的股票代碼兩次相同的貨幣?即,我只想要允許一個(IBM + USD)。 (ticker.symbol + ticker.exchange)創建唯一約束是不夠的; (IBM + NASDAQ)是無效的(IBM + NYSE)。我想我可以創建一個視圖,加入股票行情表和貨幣表,並在(view.ticker + view.currency)上創建唯一索引;但是,據我現在可以告訴,無法在視圖上創建索引。

+0

我不知道這個約束是一個偉大的想法:一個公司實際上可以在同一個貨幣兩個交易所上市公司 - 尤其是在歐洲,公司可能在交易所在兩個國家上市,無論是在歐元。 – eggyal 2012-04-23 20:44:39

+0

這很好 - 我不想用細節壓倒每個人,但這個領域實際上是「主要交換」。行情表中的每一行都可以有很多次要交易所。然而,不具有相同(ticker +貨幣)的多行的約束仍然看起來是合理的。感謝你給這個想法。 – Jimmy 2012-04-24 01:20:54

回答

1

我不認爲它可以指定在MySQL這個約束,但你能使用triggers檢查,這樣的組合不存在(如果他們這樣做引發錯誤);但請注意,在插入股票代碼表之前以及在所有三個表格上更新之前,您都需要觸發器。