Вчера я опубликовал эту проблему и ответа не получил. Прилагаю здесь образец моей проблемы. Я хочу создать эту БД:Ошибка в CASCADE в Sql - Server 2008
CREATE DATABASE [TRYShemen];
GO
USE [TRYShemen]
GO
CREATE TABLE Persons(
ID VARCHAR(50) PRIMARY KEY,
FullName VARCHAR(50) NOT NULL
);
CREATE TABLE Class(
ClassNum VARCHAR(30) PRIMARY KEY,
Teacher VARCHAR(50) NOT NULL,
constraint Class_FK foreign key (Teacher) references Persons (ID) ON DELETE NO ACTION ON UPDATE CASCADE,
);
CREATE TABLE Students(
StudentID VARCHAR(50) ,
ClassNum VARCHAR(30)
constraint Students_PK PRIMARY KEY (StudentID, ClassNum),
constraint Students_FK foreign key (StudentID) references Persons(ID) ON DELETE NO ACTION ON UPDATE CASCADE ,
constraint Students_FK1 foreign key (ClassNum) references Class(ClassNum) ON DELETE NO ACTION ON UPDATE CASCADE
);
и я получаю сообщение об ошибке:
Introducing FOREIGN KEY constraint 'Students_FK1' on table 'Students' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Я знаю, что если я не изменить «Students_FK1» в КАСКАДНЫЙ NO ACTION, он будет работать, но это не так моя цель. Я хочу, чтобы, если идентификатор «Личность» будет обновляться, он также будет обновлен в таблице «Студенты».
как я могу его решить?
спасибо!
Умный. Он также позволяет более одного учителя на класс. –
Спасибо, @outisnihil. В самом деле. И если вы этого не хотите, user2097810, конечно, у вас может быть уникальное ограничение на оба столбца id в такой таблице Classes_to_Teachers, как вы четко знаете, как это сделать. –
На самом деле еще более кратким было бы добавить «Тип» в таблицу лиц ... Тогда вам не понадобятся отдельные таблицы «Учителя» и «Студенты», а также только одна таблица ассоциаций «Classes_to_People». –