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 の間の関係を追加する 2 番目のテーブルに外部キーを追加しようとすると、エラーが発生します The column do not match an existing primary key or unique constraint というエラーが表示されます

これら 2 つのテーブルを関連付ける正しい方法は何ですか?

ありがとうございました。

4

1 に答える 1

3

PRICING テーブルに 3 つの列で構成される複合主キーがある場合、それを参照するすべての外部キーにも 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)

外部キーは、主キーの一部のみを参照することはできません。

他の唯一のオプションは、一意のインデックスを作成するdbo.Pricing(ID_Price)ことです。そうすれば、その一意の制約を外部キーから参照できます。

しかし、だけで一意のインデックスを作成できる場合dbo.Pricing(ID_Price)、本当の問題は、なぜ ID_Priceだけが主キーではないのでしょうか? すでに一意である場合 -> 次に、主キーにさらに 2 つの列を追加するのはなぜですか?

于 2013-09-18T15:02:29.390 に答える