Мне нужно создать набор таблиц в SQL Server.
Это:
chips
, для идентификации чипа, имплантируемого животномуsignals
, потому что каждый чип генерирует сигнал один раз в часsignal receivers
, станции, которые могут принимать сигнал, если чип находится в их радиусеsignal receivings
, для сигналов, принятых приемником
У меня проблема с созданием этих таблиц.
Это мой код:
CREATE TABLE CHIPS (
ID INT PRIMARY KEY,
...(not related attributes)...
);
CREATE TABLE RECEIVERS (
ID_receiver INT PRIMARY KEY,
...(some other attributes, not related to the problem)...
);
CREATE TABLE SIGNALS (
ID_chip INT FOREIGN KEY REFERENCES CHIPS,
Signal_no INT,
Date DATETIME,
PRIMARY KEY (ID_chip, Signal_no)
);
CREATE TABLE SIGNAL_RECEIVINGS (
ID_receiver INT REFERENCES RECEIVERS ,
Id_chip INT REFERENCES SIGNALS(ID_chip),
Signal_no INT REFERENCES SIGNALS(Signal_no),
PRIMARY KEY (Id_chip, Signal_no, ID_receiver )
);
Моя проблема в том, что я не знаю, как сделать правильный ключ для SIGNAL_RECEIVERS
. Я хочу, чтобы это было (Id_chip, Signal_no, ID_receiver)
, потому что только тогда оно было бы уникальным, но SQL выводит ошибку:
Количество столбцов в списке ссылочных столбцов для внешнего ключа «FK__SIGNAL_R__Si_no__5C187C73» не соответствует количеству столбцов первичного ключа в ссылочной таблице «SIGNALS».
Может ли кто-нибудь помочь мне в этом?
SINALS
, первичный ключ которого состоит из(ID_chip, Signal_no)
, поэтому ваш внешний ключ также должен точно соответствовать этим двум столбцам. То, что вы используете в качестве первичного ключа дляSIGNAL_RECEIVERS
, на самом деле не зависит от других таблиц. И, конечно же, вы всегда можете определить этот двухстолбцовый FK какSIGNALS
, а затем по-прежнему поместитьUNIQUE CONSTRAINT
в три упомянутых вами столбца (чтобы обеспечить уникальность этих кортежей) - person marc_s   schedule 06.01.2014CREATE TABLE SIGNAL_RECEIVINGS ( ID_reciver INT REFERENCES RECEIVERS, Id_chip INT, Signal_no INT, FOREIGN KEY (Id_chip, Signal_no ) REFERENCES SIGNALS, PRIMARY KEY (Id_chipu, Signal_no , ID_receiver) );
а что не так с этим делом? - person Simon   schedule 06.01.2014FOREIGN KEY
перечисляет два столбца, а первичный ключ, на который он ссылается, состоит из трех столбцов — это НЕ б> совпадение! Если вы хотите сослаться на PK, состоящий из трех столбцов, то ваш внешний ключ ДОЛЖЕН также содержать все эти три столбца. - person marc_s   schedule 06.01.2014