2012-03-08 10 views
8

Я пытаюсь создать составное отношение/ограничение внешних ключей. Все таблицы пустые. У меня есть эта таблица:Создание сложного ограничения внешнего ключа

CREATE TABLE [dbo].[ChemSampleValueTest](
    [SampleNumber] [int] NOT NULL, 
    [ParameterID] [int] NOT NULL, 
    [Value] [numeric](18, 6) NOT NULL, 
    [Accuracy] [varchar](50) NULL, 
    [ResultGroupID] [int] NOT NULL, 
    [QAState] [nvarchar](32) NOT NULL, 
    CONSTRAINT [PK_SampleValueTest] PRIMARY KEY CLUSTERED 
    (
     [SampleNumber] ASC, 
     [ParameterID] ASC, 
     [ResultGroupID] ASC 
    ) 
) ON [PRIMARY] 

и эта таблица:

CREATE TABLE [dbo].[ChemSampleValueEventLinkTest](
    [Event] [int] NOT NULL, 
    [SampleNumber] [int] NOT NULL, 
    [ResultGroupID] [int] NOT NULL, 
    [ParameterID] [int] NOT NULL, 
    [QAState] [nvarchar](32) NULL 
) ON [PRIMARY] 

и я хочу, чтобы связать их как это:

alter table [ChemSampleValueEventLinkTest] add 
    constraint FK_ChemSampleValueEvent_ChemSampleValue_test 
    foreign key ([SampleNumber], [ResultGroupID], [ParameterID]) 
    references ChemSampleValueTest ([SampleNumber], [ResultGroupID], [ParameterID]) 

Насколько я могу сказать, всем типам столбцов одинаковы, но он продолжает говорить

В ссылочной таблице нет основных или потенциальных ключей «ChemSampleValueTest», которые соответствуют списку столбцов ссылок во внешнем ключе «FK_ChemSampleValueEvent_ChemSampleValue_test».

Где я иду не так?

+0

Есть несколько подобных вопросов, разбросанных вокруг (в основном о нарушениях ограничений), но я не мог найти ничего, что помогло мне. – sennett

ответ

15

Похоже, что вам нужен список FK/ссылок в том же порядке, который они отображаются в определении PK.

Это должно работать:

CREATE TABLE [dbo].[ChemSampleValueTest](
    [SampleNumber] [int] NOT NULL, 
    [ParameterID] [int] NOT NULL, 
    [Value] [numeric](18, 6) NOT NULL, 
    [Accuracy] [varchar](50) NULL, 
    [ResultGroupID] [int] NOT NULL, 
    [QAState] [nvarchar](32) NOT NULL, 
    CONSTRAINT [PK_SampleValueTest] PRIMARY KEY CLUSTERED 
    (
     [SampleNumber] ASC, 
     [ParameterID] ASC, 
     [ResultGroupID] ASC 
    ) 
) ON [PRIMARY] 

CREATE TABLE [dbo].[ChemSampleValueEventLinkTest](
    [Event] [int] NOT NULL, 
    [SampleNumber] [int] NOT NULL, 
    [ResultGroupID] [int] NOT NULL, 
    [ParameterID] [int] NOT NULL, 
    [QAState] [nvarchar](32) NULL 
) ON [PRIMARY] 

alter table [ChemSampleValueEventLinkTest] add 
    constraint FK_ChemSampleValueEvent_ChemSampleValue_test 
    foreign key ([SampleNumber], [ParameterID], [ResultGroupID]) 
    references ChemSampleValueTest ([SampleNumber], [ParameterID], [ResultGroupID]) 
+0

Вы правы. Думая об этом, это имеет смысл. Композитные внешние ключи. Разум-изгиб, но начинающий иметь смысл. Спасибо за помощь. – sennett