2015-06-01 2 views
1

Мои данные в таблицах (Это пример):ССЫЛКА НА КОМПОЗИЦИОННЫХ PRIMARY KEY

BOX enter image description here

И КОРОБКА СОДЕРЖАНИЕ Таблица: enter image description here

И каждый ящик в системе будет таким. Потому что одна коробка должна иметь: КЛИЕНТ КОД, BOX CODE И BOX NUM

И каждый элемент в коробке должны быть: КЛИЕНТ КОД, BOX CODE, BOX NUM И ОДИН НОМЕР ДЛЯ КАЖДОГО ПУНКТА.

Теперь для этого я сделать составной первичный ключ на обеих таблицах:

CREATE TABLE BOX ( 
CLIENT_CODE NVARCHAR(10), 
BOX_CODE Nvarchar(50), 
BOX_NUMBER SMALLINT, 
BOX_CONTENT NVARCHAR(250), 
CONSTRAINT PK_BOX_CLI_COD_NUM PRIMARY KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER) 
); 

и

CREATE TABLE BOX_CONTENT ( 
CLIENT_CODE NVARCHAR(10), 
BOX_CODE Nvarchar(50), 
BOX_NUMBER SMALLINT, 
BOX_CONTENT_NUMBER SMALLINT, 
ID1 NVARCHAR(50), 
ID2 NVARCHAR(50), 
ID3 NVARCHAR(50), 
ID4 NVARCHAR(50) 
CONSTRAINT PK_BOXCONT_CLI_COD_BNUM_CNUM PRIMARY KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER, BOX_CONTENT_NUMBER) 
); 

Мой вопрос, как я могу ссылаться на внешние ключи между таблицами? В этих таблицах будет много данных и нужны ссылки.

Если я это сделать:

CONSTRAINT fk_BOX_CLI FOREIGN KEY(CLIENT_CODE) REFERENCES BOX(CLIENT_CODE), 
CONSTRAINT fk_BOX_CODE FOREIGN KEY(BOX_CODE) REFERENCES BOX(BOX_CODE), 
CONSTRAINT fk_BOX_NUMB FOREIGN KEY(BOX_NUMBER) REFERENCES BOX(BOX_NUMBER) 

У меня есть ошибка, если я устанавливаю FK в одной строке тоже.

У кого-нибудь есть идея, пожалуйста? Следует принять во внимание ...

С наилучшими пожеланиями ...

+0

Пожалуйста, найдите время, чтобы заменить изображения (ссылку) на фактический текст. Это не выглядит сложным. –

+1

И нижний регистр титула столицы –

+0

Спасибо Royi, Но когда я попробовал, табуляции и пробелы смещены. Итак, я вставил ссылки на изображения, чтобы лучше показать, что у меня есть, и что мне нужно. –

ответ

4

Вам нужно поставить ограничение в одной ссылки:

CONSTRAINT fk_BOX FOREIGN KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER) 
    REFERENCES BOX(CLIENT_CODE, BOX_CODE, BOX_NUMBER) 

Однако, я хотел бы призвать вас, чтобы положить удостоверение Int первичный ключ на BOX и использовать его для ссылки на внешний ключ. Вы можете объявить ограничение UNIQUE на BOX(CLIENT_CODE, BOX_CODE, BOX_NUMBER), чтобы предотвратить дубликаты.

+0

Спасибо, Гордон, Это работает !!! .... –