2014-03-18 41 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选择一个复合键,而不是......关心! –