Задать вопрос
@qazxdr

Два и более Foreign Key полей одной таблицы на ОДНО поле главной таблицы-справочника. Ошибка при создании?

Есть две таблицы А и В. Таблица В- справочник, имеет первичный ключ с одним полем. Таблица А должна иметь только FK-ключи. Значения полей a1 и a2 не пересекаются (но могут быть NULL). Оба поля должны брать значения из PK таблицы B.
При создании первого foreign key ошибки не возникает.
При создании второго foreign key возникает ошибка: "Introducing FOREIGN KEY constraint 'FK_A_B_2' on table 'A' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints."
То есть говорится о зацикливании, хотя его по сути нет.
Должно быть две связи одной строки таблицы A c таблицей B.
sql server 2008R2

Ошибка возникает при создании foreign key второго поля таблицы A - a2 на PK таблицы B.
CREATE TABLE A
(
	a1 int NULL,
	a2 int NULL,
	a3 int NULL	
)
GO

CREATE TABLE B
(
	b1 int IDENTITY  (1,1) NOT NULL,
	b2 int NULL,
	PRIMARY KEY(b1)
)
GO
IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_A_B]') AND parent_object_id = OBJECT_ID(N'[dbo].[A]'))
ALTER TABLE dbo.A DROP CONSTRAINT FK_A_B 
GO

ALTER TABLE dbo.A  WITH CHECK ADD CONSTRAINT FK_A_B FOREIGN KEY(a1)
REFERENCES dbo.B (b1) ON DELETE SET NULL 
GO

IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_A_B_2]') AND parent_object_id = OBJECT_ID(N'[dbo].[A]'))
ALTER TABLE dbo.A DROP CONSTRAINT FK_A_B_2
GO

/*После следующих строк возникает ошибка*/
ALTER TABLE dbo.A  WITH CHECK ADD CONSTRAINT FK_A_B_2 FOREIGN KEY(a2)
REFERENCES dbo.B (b1) ON DELETE SET NULL 
GO
  • Вопрос задан
  • 4518 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы