2014-03-18 67 views
0

下表中的product_rate_id列需要從另一個表中作爲外鍵引用。 但是,product_rates TABLE必須包含product_rate_id的重複值。 (遺留系統,不要問爲什麼)可保存重複值的外鍵

CREATE TABLE product_rates 
(
    row_id    INT IDENTITY(1,1) NOT NULL, 
    product_rate_id INT NOT NULL, 
    START_DATE   DATETIME NOT NULL, 
    end_date   DATETIME, 
    unit_rate   NUMERIC(18,6) 
) 

所以,問題是:你可以擁有它被引用作爲另一個表的外鍵包含重複值的列? 有沒有解決這個問題的方法?

+1

可能重複的[可以外鍵NULL和重複?](http://stackoverflow.com/questions/7573590/can-foreign-key-null-and-duplicate) –

+0

有一個很好的在上面的問題中回答簡答題是一個外鍵約束不必是唯一的 –

+0

你如何創建一個非唯一約束? –

回答

4

你可以有一列被另一個表引用爲外鍵包含重複值?

否 - 外鍵約束必須引用唯一鍵。

你仍然可以保持一個(非外鍵)參照相關表中product_rate_id價值,但你必須決定通過使用一個有效的,其相關查詢,當你想記錄(我假設日期在start_dateend_date之間

+0

對不起,我不同意。您可以擁有像Order.id_order這樣的PK,以及具有與唯一id_order值(FK不唯一或重複)關聯的多行(訂單詳細信息)的FK to Order_Detail.id_order。 –

+0

@ EugenioF.MartinezPacheco這不是問題 - 問題是你可以有一個引用'product_rate_id'的外鍵,它不是唯一的。 –

+0

好的,我明白了,你是對的@ d-stanley:P .....也許「product_rate_id」應該用代理鍵替換爲PK,或者爲FK選擇一個複合鍵,而不是......關心! –