0

你好,我有一张简单的桌子

CREATE TABLE [dbo].[PRICING](
    [ID_PRICE] [int] NOT NULL,
    [DATA_START] [datetime] NOT NULL,
    [DATA_END] [datetime] NOT NULL,
 CONSTRAINT [PK_PRICING] PRIMARY KEY CLUSTERED 
(
    [ID_PRICE] ASC,
    [DATA_START] ASC,
    [DATA_END] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

主键由 3 列组成(我需要这个三键)

现在我需要将它与另一个表相关联

CREATE TABLE [dbo].[MOV](
    [ID_MOV] [int] IDENTITY(1,1) NOT NULL,
    [SALDO] [float] NOT NULL,
    [ID_PRICING_BUY] [int] NOT NULL,
    [ID_PRICING_SELL] [int] NOT NULL,
 CONSTRAINT [PK_MOV] PRIMARY KEY CLUSTERED 
(
    [ID_MOV] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

当我尝试将外键添加到第二个表时,添加表 MOV 中的 ID_PRICING_BUY 和表 PRICING 中的 ID_PRICE 之间的关系时出现错误 The column do not match an existing primary key or unique constraint

现在关联这两张表的正确方法是什么?

谢谢你。

4

1 回答 1

3

如果您的 PRICING 表中有一个由 3 列组成的复合主键,那么所有引用它的外键也必须包括所有三列

ALTER TABLE dbo.MOV
ADD CONSTRAINT FK_MOV_PRICING
FOREIGN KEY(ID_PRICING_BUY, -new-column-for-start-date-, -new-column-for-end-date-)
REFERENCES dbo.PRICING(ID_PRICE, DATA_START, DATA_END)

外键不能只引用主键的一部分。

唯一的其他选择是在 just 上创建唯一索引dbo.Pricing(ID_Price)- 然后您可以从外键引用该唯一约束。

但是如果您可以在 just 上创建唯一索引dbo.Pricing(ID_Price),那么真正的问题就变成了为什么不只是 ID_Price主键单独?如果它已经是唯一的->那么为什么要在主键中再添加两列???

于 2013-09-18T15:02:29.390 回答